猫鼬:查找并更新一个包含最小值的文档

时间:2019-08-03 03:36:09

标签: mongodb sorting mongoose find

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

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

b

我想查找并更新项目数量最少的文档的状态{ "_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 } ,在这种情况下,这是第二个包含10个项目的文档。

有什么方法只能使用一个查询吗?我一直在尝试使用1findOneAndUpdate选项,但是它不起作用。看来这不是有效的查询。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

以最少的项目更新状态

尝试

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

答案 1 :(得分:1)

通过使用聚合函数,我们可以设置值。首先,我们必须基于items字段以升序对文档进行排序,然后限制输出一个。然后使用$set运算符,我们可以更改值。

请找到以下查询:

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