Javaで最後にアップサートされたドキュメントの_idを見つける必要があります。2.0.5を使用しています。要素が更新された場合、getLastErrorによって返される出力に「upserted」フィールドが表示されません。要素が挿入されているかどうかはわかります。要素が更新されたか挿入されたかに関係なく、_idを取得する必要があります。別のfindコマンドを発行する以外の方法でドキュメントの_idを取得することは可能ですか?不要なクエリを減らしようとしています。
2 に答える
0
DBCollection.findAndModify()を使用できます。アップサートを実行し、作成/変更したばかりのオブジェクトの_idを含むDBObjectを返すようにパラメーターを設定できます。
詳細については、ドキュメントを確認してください: http ://www.mongodb.org/display/DOCS/findAndModify+Command
補遺:私は自分の答えを再検討し、より良い、より簡単な方法があることに気づきました。_idの値は、ドキュメントがネットワーク経由でサーバーに送信される前に、常にクライアント側で設定されます。_idにまだ値を割り当てていない場合は、ドライバーがこれを行います。クライアントが_idを設定するので、挿入操作が開始される前でも、それが何であるかがわかります。この例を考えてみましょう。
> var id = ObjectId()
> id
ObjectId("5511062d729ddce46b99ea3f")
> db.test.insert( { _id: id, text:"a trivial experiment"})
WriteResult({ "nInserted" : 1 })
> db.test.find( { _id: id} )
{
"_id" : ObjectId("5511062d729ddce46b99ea3f"),
"text" : "a trivial experiment"
}
于 2012-06-26T00:22:33.060 に答える
0
次のコードは、最後に変更されたレコードを提供します。
db.products.find().sort({"$natural":1}).limit(1);
次のコードは、最後に挿入されたレコードを提供します。
db.products.find().sort({"_id":-1}).limit(1);
db.products.find().sort({"$natural":-1}).limit(1);
于 2015-03-24T07:54:38.710 に答える