如何使用MongoDB中的$ orderby和$ limit更新文档

时间:2014-04-08 22:22:14

标签: mongodb sql-order-by

我想做点什么

UPDATE tbl SET n=10 WHERE time>NOW()-INTERVAL 1 HOUR ORDER BY b DESC LIMIT 1

我试过

db.tbl.update({$query:{time:{$gt:new Date(new Date()-3600000)},
               $orderby:{b:-1},
               $limit:1},
              {$set:{n:10}})

但它没有用。我能够使用db.tbl.find({$ query:...})找到该文档。

1 个答案:

答案 0 :(得分:1)

实际上有两种方法可以解决(顺便说一下,我认为mongoDB肯定会在下一个版本中解决这个长期存在的问题)。

  1. 在find()之后使用forEach()。您也可以使用save()代替update()。此解决方法的问题是性能,因为更新/保存需要再次搜索。

    db.tbl.find({$查询:...})的forEach(函数(d){。   db.tbl.update({_ ID:d._id},{$设置:{N:10}}); })

  2. 使用findAndModify()。这仅适用于限制1.如果您需要更新多个文档,则findAndModify()无法执行此操作。

    db.tbl.findAndModify({   查询:{time:{$ gt:new Date(new Date() - 3600000)}},   排序:{B:-1},   更新:{$组:{N:10}} })