使用mongodb中的搜索条件更新最后一行

时间:2016-03-23 03:02:46

标签: 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});

2 个答案:

答案 0 :(得分:1)

您可以使用findAndModify执行此操作,这样您就可以使用排序规范来标识要更新的匹配文档:

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

如果您使用的是v3.2或更高版本,也可以使用findOneAndUpdate

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

答案 1 :(得分: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 shell这样的东西。如果你指定我可以测试以确保答案可行。