2017-03-10 3 views
0

を更新していない文書を更新するために私のコードです:CouchbaseのライトDocumentUpdaterはここデシベル

 doc.update(new Document.DocumentUpdater() { 
     @Override 
     public boolean update(UnsavedRevision newRevision) { 
      Map < String, Object > properties = newRevision.getUserProperties() 
      properties.put("timeCreated", "348390284"); 
      properties.put("name", "231321"); 
      return true; 
     } 
    }); 

私はクエリを実行し、次のコードを使用して結果行を反復処理する場合:

Database db = getDB(ID); 
    Query query = db.createAllDocumentsQuery(); 
    query.setDescending(true); 

    try { 
     QueryEnumerator result = query.run(); 
     for (Iterator<QueryRow> it = result; it.hasNext();) { 
      QueryRow row = it.next(); 
      row.getDocument().getProperties(); 
     } 
    } catch (CouchbaseLiteException e) {} 

行には私がアップデータに入れた更新はありません。私は次のようなものを得ています:

row -> size 2 
"conflict" -> "size=0" 
"rev" -> "1-ac2065458743..." 

私はこの時点で固まっており、それを修正する方法がわかりません。

+0

どのバージョンのCouchbaseを使用していますか?クエリから2つのドキュメントを取得しています。彼らはあなたが作成した元のコンテンツを持っていますか? – Hod

+0

これは私のGradleファイルの 'compile 'という行です。com.couchbase.lite:couchbase-lite-android:+''元々、文書は空です(新しい文書を作成しました)。すべてのドキュメントクエリを実行すると、各行に自分のコンテンツがありません – user7688889

+0

私がこのアップデータと呼ぶ場所に関するちょっとしたコンテキストです。私のアンドロイドWebサーバーでは、ペイロードがサーバーに来るようにペイロードを保存します。私は新しいスレッドを作成して各リクエストを処理し、そのスレッドでは私はアップデータを使用します。 – user7688889

答えて

0

UnsavedRevision.getUserProperties()は、新しいMapインスタンスを返します。したがって、trueを返す前に、setUserProperties()メソッドをリビジョンに呼び出すことによってそれを元に戻す必要があります。

以下のコードはCouchbase Liteサンプルコードです。 LINK

Document doc = database.getDocument(myDocId); 
doc.update(new Document.DocumentUpdater() { 
    @Override 
    public boolean update(UnsavedRevision newRevision) { 
     Map<String, Object> properties = newRevision.getUserProperties(); 
     properties.put("title", title); 
     properties.put("notes", notes); 
     newRevision.setUserProperties(properties); <<---- 
     return true; 
    } 
}); 

私はこれがあなたに役立つことを望みます。

ありがとうございます!

関連する問題