2

我想查找collectionTwo中存在以下collectionOne的“taskId”数量。 这里,下面collectionOne中的“taskId”嵌入文档中的数组内。mongodb - 查找其他集合中的值的计数

另外,让我知道不同的方法来做到这一点(如果可能的话)。

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" 
} 

In collectionTwo“_id”相当于collectionOne的“taskId”。

+0

添加collectionTwo的示例文档。在collectionTwo中,“_id”等同于collectionOne的“taskId”。 –

回答

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的列表,并将该列表用作collectionTwo上的计数查询,例如

var taskIds = db.collectionOne.distinct("data.taskId"); 
var tasksCount = db.collectionTwo.count({ "_id": { "$in": taskIds } }); 
printjson(taskIds); 
printjson(tasksCount); 
+0

我们可以将其输出更改为{“count”:2} - 只需计数,而不是两个文档作为输出。 {“_id”:1461982,“count”:1} {“_id”:146108906,“count”:1} –

+0

嗨,我需要collectionOne中存在的所有taskId的总数。 (这是要求)。在上面的情况下,它是两个,所以我需要输出为{“count”:2} –

+0

Typo on above comment。我的错。我需要collectionTwo中存在的所有taskIds的总数。 (这是要求)。在上面的场景中,collectionOne中只有两个collectionOne的taskIds存在,所以我需要输出为{“count”:2} –

相关问题