MongoDB:如何在更新之前对查询进行排序

Jon*_*rsi 5 javascript mongodb node.js meteor

我正在编写一个 Meteor (Node.js) 应用程序,它在后端使用 MongoDB。在代码中的某个时刻,我需要更新集合中的特定文档。我需要使用 Mongo 的 update() 方法,但我在传递正确的(复杂的)查询以缩小到该特定文档的范围时遇到问题。我试图更新的文档是:

db.collection.find({market: 'AAA'}).sort({creationDate:-1}).limit(1)

换句话说,其中的一个文档collection具有 的市场AAA并且是最近创建的(creationDate 是一个 UNIX 时间戳编号,例如1408829429914)。有多个文档的市场为AAA,因此我使用 sort() 和 limit(1) 来查找最近创建的文档。

Mongo 的update()似乎不接受排序参数作为更新过程之前查询的一部分。我可以做什么来缩小范围并更新该文档?谢谢!

Dav*_*don 3

您将需要获取所需的文档,然后通过 更新它_id。如果您的集合被调用Markets,代码将如下所示:

var market = Markets.findOne({market: 'AAA'}, {sort: {creationDate:-1}});
Markets.update(market._id, {$set: {fancy: true}});
Run Code Online (Sandbox Code Playgroud)

值得一提的是,即使 MongoDB 支持你正在寻找的优化,meteor 客户端代码无论如何也只能更新_id