我有一个收藏:
{
"_id": {
"$oid": "5f84ffad51d91fa6247b17e6"
},
"chat_id": 1,
"status": true,
"members": [{
"user_id": 2436324243,
"rank": 1
}, {
"user_id": 2346246243,
"rank": 2
}, {
"user_id": 2634243643,
"rank": 1
}, {
"user_id": 2634634234,
"rank": 0
}],
"groups": [...]
},
{
"_id": {
"$oid": "5f84ffad51d91fa6247b17e7"
},
"chat_id": 2,
"status": true,
"members": [{
"user_id": 1526236,
"rank": 1
}, {
"user_id": 13242664,
"rank": 2
}, {
"user_id": 12315161,
"rank": 1
}, {
"user_id": 21362463,
"rank": 0
}],
"groups": [...]
}
我想从chat_id = 2
一组对象members
中获取members.rank >= 1
,对于上述数据,答案应该如下所示:
{ "members" : [{
"user_id": 1526236,
"rank": 1
}, {
"user_id": 13242664,
"rank": 2
}, {
"user_id": 12315161,
"rank": 1
}]
}
试过了
db.chats.find({"chat_id": 2, "members": {"$elemMatch": {"rank" : {"$gte": 1}}}}, {"_id": 0, "members.$":1})
但它只返回一个对象
您的请求中有多个错误。
"members.$": 1
将返回找到的数组中的第一个元素,如果将其删除,则将返回一个完整的数组:但它将包含一个额外的元素。这是因为它
$elemMatch
选择了数组中至少有一个元素满足条件的对象> 1
。这可以解决
aggregate
,例如,像这样:或像这样: