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

相關問題