2016-03-23 13 views
2

で検索条件との最後の行は私のコレクションです:更新以下のMongoDB

db.himtest.find({name:"himanshu"}) 
{ "_id" : ObjectId("56f1667611c54cf649076577"), "name" : "himanshu", "age" : 45, 
"points" : 10 } 
    { "_id" : ObjectId("56f1667c11c54cf649076578"), "name" : "himanshu", "age" : 35, 
"points" : 10 } 
{ "_id" : ObjectId("56f1669511c54cf64907657b"), "name" : "himanshu", "age" : 35, 
"points" : 1100 } 
{ "_id" : ObjectId("56f1669a11c54cf64907657c"), "name" : "himanshu", "age" : 35, 
"points" : 11000 } 
{ "_id" : ObjectId("56f1669d11c54cf64907657d"), "name" : "himanshu", "age" : 45, 
    "points" : 11000 } 
{ "_id" : ObjectId("56f166a311c54cf64907657e"), "name" : "himanshu", "age" : 45, 
    "points" : 1200 } 

は今、私のような任意の選択基準の何かに基づいて最後の行を更新する:

db.himtest.find({name:"himanshu",age:45}).sort({_id:-1}).limit(1).update({points:100}); 

答えて

1

あなたはマッチした文書のどれを更新するために、あなたが識別するために、ソート指定を含めることができますfindAndModifyでこれを行うことができます。

db.himtest.findAndModify({ 
    query: {name: "himanshu", age: 45}, 
    sort: {_id: -1}, 
    update: {$set: {points: 100}}, 
    new: true 
}) 

を使用すると、上記のV3.2かを使用している場合は、できるも:

db.himtest.findOneAndUpdate(
    {name: "himanshu", age: 45}, 
    {$set: {points: 100}}, 
    { 
     sort: {_id: -1}, 
     returnNewDocument: true 
    }) 
+0

"shell"のドキュメントがまだマークされていないにもかかわらず、['.findOneAndUpdate()'](https://docs.mongodb.org/manual/reference/method/db.collection.findOneAndUpdate/)他のすべてのAPIドキュメントでは廃止予定です。言語API間でも一貫しています。この質問は以前は尋ねられていなかったと驚いた。 –

+0

@BlakesSevenええ、しかし、OPが3.2であったかどうかは分からなかったので、私は最小公約数分母オプションを使いました。とにかく、いいアイデアが追加されました。 – JohnnyHK

0

あなたはこのようなことをしたいと思うでしょう。

db.himtest.find({name:"himanshu",age:45}). 
    sort({id:-1}). 
    limit(1). 
    forEach(function(e){ 
    e.points = 100 
    db.himtest.save(e) 
}) 

mongooseまたはmongodbシェルのようなものを使用しているかどうかはわかりません。あなたが指定した場合、私は答えが働くことを確認するためにテストすることができます。

+0

私はmongodbシェルを使用しています –

+0

更新された回答を参照してください。それがあなたのためにどのように働くか教えてください。 – user2263572

+0

FYI、ちょうど更新、私はラインを残していた。 – user2263572

関連する問題