2

Ich möchte herausfinden, wie viele "taskId" von unter collectionOne in collectionTwo vorhanden ist. Hier ist "taskId" in unter collectionOne in einem Array in einem Dokument eingebettet.mongodb - Finde die Anzahl der Werte in einer anderen Sammlung

Lassen Sie mich auch die verschiedenen Ansätze dazu (wenn möglich) wissen.

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" entspricht "taskId" von collectionOne.

+0

Beispieldokumente von collectionTwo hinzugefügt. In collectionTwo "_id" entspricht "taskId" von collectionOne. –

Antwort

1

Mit dem $lookup Operator eine links auf collectionTwo zu tun kommen, können Sie die Zählungen erhalten wie folgt:

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

- EDIT -

Eine Alternative ist, um eine Liste aller unterschiedlichen taskIds in collectionOne zu erhalten, und diese Liste als Count-Abfrage für collectionTwo zu verwenden, z

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

Können wir seine Ausgabe in {"count": 2} ändern - Nur die Zählung statt zwei Dokumente als Ausgabe. {"_id": 1461982, "count": 1} {"_id": 146108906, "count": 1} –

+0

Hallo, ich brauche die Gesamtzahl aller in CollectionOne vorhandenen TaskIds. (Dies ist die Voraussetzung). Im obigen Szenario ist es zwei, also muss ich als {"count": 2} –

+0

Typo auf obigen Kommentar ausgeben. Mein Fehler. Ich benötige die Gesamtzahl aller in Collection2 enthaltenen TaskIds. (Dies ist die Voraussetzung). Im obigen Szenario sind nur zwei taskIds von collectionOne in collectionTwo vorhanden, also muss ich als {"count": 2} ausgeben –

Verwandte Themen