【问题标题】:Mongoose: Find and update one document that contains min valueMongoose:查找并更新一个包含最小值的文档
【发布时间】:2019-12-11 14:25:05
【问题描述】:

我正在尝试在 Mongo 集合中查找包含最小值的文档,然后更新其状态。

这是我的收藏。该集合中可能包含更多文档。在这个例子中,我只会给你 3 个文档。

{
    "_id" : ObjectId("5d44f733fa2a2f021dbbd2d6"),
    "userId" : ObjectId("5d3b4766e14bc7085e74c4e7"),
    "items" : 13,
    "status" : 2,
    "__v" : 0
},
{
    "_id" : ObjectId("5d44f76efa2a2f021dbbd2d7"),
    "userId" : ObjectId("5d3b4766e14bc7085e74c4e7"),
    "items" : 10,
    "status" : 2,
    "__v" : 0
},
{
    "_id" : ObjectId("5d44f76efa2a2f021a5b64d"),
    "userId" : ObjectId("5d3b4766e14bc7085e74c4e7"),
    "items" : 15,
    "status" : 2,
    "__v" : 0
}

我想查找具有最少项目数量的文档的状态并将其更新为1,在本例中是包含 10 个项目的第二个文档。

有没有办法只使用一个查询来做到这一点?我一直在尝试使用findOneAndUpdate 使用选项sort 来做到这一点,但它不起作用。这似乎不是一个有效的查询。

有什么想法吗?

【问题讨论】:

  • 你想如何更新值?通过查询或使用代码?如果使用代码提及语言绑定

标签: mongodb sorting mongoose find


【解决方案1】:

用最少的项目更新状态

试试这个

db.collection.findOneAndUpdate(
   { $set : { "status" : 1 } },
   { sort : { "items" : 1 } }
)

【讨论】:

    【解决方案2】:

    通过使用聚合函数,我们可以设置值。首先,我们必须根据items 字段按升序对文档进行排序,然后限制输出。然后使用$set 操作符,我们可以改变值。

    请找到以下查询:

    db.users.aggregate(
       [
         { $sort : { items : 1} },
         { $limit : 1 },
         {$set : {"status" : 1}}
       ]
    )
    

    【讨论】:

      猜你喜欢
      • 2014-11-27
      • 2016-06-28
      • 2016-08-29
      • 1970-01-01
      • 2018-01-20
      • 2020-06-07
      • 2021-02-21
      • 1970-01-01
      • 2020-06-11
      相关资源
      最近更新 更多