我正在尝试在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个项目的文档。
有什么方法只能使用一个查询吗?我一直在尝试使用1
和findOneAndUpdate
选项,但是它不起作用。看来这不是有效的查询。
有什么想法吗?
答案 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}}
]
)