我想做点什么
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:...})找到该文档。
答案 0 :(得分:1)
实际上有两种方法可以解决(顺便说一下,我认为mongoDB肯定会在下一个版本中解决这个长期存在的问题)。
在find()之后使用forEach()。您也可以使用save()代替update()。此解决方法的问题是性能,因为更新/保存需要再次搜索。
db.tbl.find({$查询:...})的forEach(函数(d){。 db.tbl.update({_ ID:d._id},{$设置:{N:10}}); })
使用findAndModify()。这仅适用于限制1.如果您需要更新多个文档,则findAndModify()无法执行此操作。
db.tbl.findAndModify({ 查询:{time:{$ gt:new Date(new Date() - 3600000)}}, 排序:{B:-1}, 更新:{$组:{N:10}} })