MongoDB:给定一个键列表,检查集合中是否有与该键匹配的文档
MongoDB: Given a list of keys, check if there is any document in a collection that matches the key
假设我在用户集合中有以下数据:
{
"_id": "1",
"name": "Robert"
},
{
"_id": "2",
"name": "David"
},
{
"_id": "3",
"name": "Sam"
},
{
"_id": "4",
"name": "Michael"
}
以及给定的键列表:["1", "3", "5", "7"]
我希望检查每个键是否在集合中有匹配的文档。所以结果会是这样的:
{
"_id": "1",
"matched": true
},
{
"_id": "3",
"matched": true
},
{
"_id": "5",
"matched": false
},
{
"_id": "7",
"matched": false
}
如何使用单个查询获得此结果?如果有任何帮助,我将不胜感激。
此解决方案要求用户集合中至少存在 1 个文档
您可以使用 $unwind
使用给定的 _id
创建文档。然后执行 $lookup
并检查结果数组的大小。
db.User.aggregate([
{
$limit: 1
},
{
$project: {
_id: [
"1",
"3",
"5",
"7"
]
}
},
{
"$unwind": "$_id"
},
{
"$lookup": {
"from": "User",
"localField": "_id",
"foreignField": "_id",
"as": "userLookup"
}
},
{
"$project": {
matched: {
$gt: [
{
$size: "$userLookup"
},
0
]
}
}
}
])
这里是Mongo playground供您参考。
假设我在用户集合中有以下数据:
{
"_id": "1",
"name": "Robert"
},
{
"_id": "2",
"name": "David"
},
{
"_id": "3",
"name": "Sam"
},
{
"_id": "4",
"name": "Michael"
}
以及给定的键列表:["1", "3", "5", "7"]
我希望检查每个键是否在集合中有匹配的文档。所以结果会是这样的:
{
"_id": "1",
"matched": true
},
{
"_id": "3",
"matched": true
},
{
"_id": "5",
"matched": false
},
{
"_id": "7",
"matched": false
}
如何使用单个查询获得此结果?如果有任何帮助,我将不胜感激。
此解决方案要求用户集合中至少存在 1 个文档
您可以使用 $unwind
使用给定的 _id
创建文档。然后执行 $lookup
并检查结果数组的大小。
db.User.aggregate([
{
$limit: 1
},
{
$project: {
_id: [
"1",
"3",
"5",
"7"
]
}
},
{
"$unwind": "$_id"
},
{
"$lookup": {
"from": "User",
"localField": "_id",
"foreignField": "_id",
"as": "userLookup"
}
},
{
"$project": {
matched: {
$gt: [
{
$size: "$userLookup"
},
0
]
}
}
}
])
这里是Mongo playground供您参考。