我想在collectionTwo中找到以下collectionOne中有多少“taskId”。 这里,下面collectionOne中的“taskId”嵌入在文档中的数组中。
另外,让我知道执行此操作的不同方法(如果可能)。
db.collectionOne.find({"sId":"DCNrnPeKFrBv" }).pretty()
{
"_id" : "sX8o7mJhebs",
"sId" : "DCNrnPeKFrBv",
"data" : [
{
"oId" : "7SycYQ",
"taskId" : 146108906
},
{
"oId" : "7SycYQ",
"taskId" : 14623846
},
{
"oId" : "fANQ",
"taskId" : 1461982
},
{
"oId" : "fAeNQ",
"taskId" : 131732
},
{
"oId" : "t6AF5yn",
"taskId" : 197681
}
]
}
> db.collectionTwo.find().pretty().limit(2)
{
"_id" : 146108906,
"oId" : "7SycYQ",
"name" : "ABC"
}
{
"_id" : 1461982,
"oId" : "fANQ",
"name" : "XYZ"
}
在collectionTwo中,“_ id”相当于collectionOne的“taskId”。
答案 0 :(得分:1)
使用 $lookup
运算符在collectionTwo
上进行左连接,您可以按如下方式获取计数:
db.collectionOne.aggregate([
{ "$unwind": "$data" },
{
"$lookup": {
"from": "collectionTwo",
"localField": "data.taskId",
"foreignField": "_id",
"as": "tasks"
}
},
{ "$unwind": "$tasks" },
{
"$group": {
"_id": "$tasks._id",
"count": { "$sum": 1 }
}
},
{
"$group": {
"_id": null,
"total": { "$sum": "$count" }
}
}
])
- 的修改 -
另一种方法是获取collectionOne中所有不同taskIds的列表,并将该列表用作collection上的count查询,例如。
var taskIds = db.collectionOne.distinct("data.taskId");
var tasksCount = db.collectionTwo.count({ "_id": { "$in": taskIds } });
printjson(taskIds);
printjson(tasksCount);