【问题标题】:MongoDB: How to Sort a Query Before UpdatingMongoDB:如何在更新前对查询进行排序
【发布时间】:2014-10-17 11:42:39
【问题描述】:

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

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

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

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

【问题讨论】:

标签: javascript node.js mongodb meteor


【解决方案1】:

您需要获取所需的文档,然后通过_id 对其进行更新。如果您的收藏名为Markets,则代码如下所示:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-06
    • 1970-01-01
    • 2019-03-30
    • 2013-09-30
    • 2013-10-22
    • 2020-10-22
    • 2018-08-19
    相关资源
    最近更新 更多