0

mongodb allanbank非同期ドライバーを使用してコレクション内のフィールドを更新するにはどうすればよいですか?

私が言ったら

db.getCollection("coll_name").update( //$NON-NLS-1$
                 BuilderFactory.start().add("_id", docObjectId),
                 BuilderFactory.start().add("field", value)); //$NON-NLS-1$

必要なフィールドを新しい値に更新しましたが、ドキュメント内の他のすべてのフィールドが消えます。言い換えれば、$setmongoシェルの類似物は何ですか?

4

2 に答える 2

2

$set演算子をサブドキュメントで直接使用する必要があります。例えば、

DocumentBuilder update = BuilderFactory.start();
update.push("$set").add("field", value); //$NON-NLS-1$

db.getCollection("coll_name").update( //$NON-NLS-1$
             BuilderFactory.start().add("_id", docObjectId),
             update); 
于 2013-03-03T03:55:41.637 に答える
0

Rob Moore の回答に感謝します。彼の助けは本当にかけがえのないものでした。しかし、少し不正確な点がありpop()ます。すべてが機能するように追加する必要がありました。そう:

DocumentBuilder update = BuilderFactory.start();
update = (DocumentBuilder)update.push("$set").add("field", value).pop(); //$NON-NLS-1$ //$NON-NLS-2$

db.getCollection("coll").update( //$NON-NLS-1$
    BuilderFactory.start().add("_id", docObjectId), //$NON-NLS-1$
    update);
于 2013-03-03T13:10:53.863 に答える