Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在MongoDB中使用$orderby和$limit更新文档_Mongodb_Sql Order By - Fatal编程技术网

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

如何在MongoDB中使用$orderby和$limit更新文档,mongodb,sql-order-by,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}}) 但它不起作

我想做一些像

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:…})找到文档。

实际上有两种解决方法(顺便说一句,我认为mongoDB应该在下一个版本中解决这个早该解决的问题)

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

    db.tbl.find({$query:…}).forEach(函数(d){ update({u id:d.{u id},{$set:{n:10}); })

  • 使用findAndModify()。这仅适用于限制1。如果需要更新多个文档,findAndModify()将无法更新

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


  • 目前没有办法,但无论如何,以下是您想要观看的内容: