2

Я хочу найти, сколько «taskId» ниже коллекцииOne присутствует в коллекции Two. Здесь «taskId» в нижерасположенной коллекции One встроен в массив в документе.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" 
} 

В коллекцииTwo «_id» эквивалентно «taskId» коллекции One.

+0

Добавлены образцы документов коллекции Two. В collectionTwo «_id» эквивалентно «taskId» collectionOne. –

ответ

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

- EDIT -

Альтернатива для получения списка всех отдельных taskIds в collectionOne и использовать этот список в качестве запроса подсчета на collectionTwo eg

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

Привет, мне нужно общее количество всех taskIds, присутствующих в collectionOne. (Это требование). В приведенном выше сценарии это два, поэтому мне нужен вывод как {"count": 2} –

+0

Typo on above comment. Моя вина. Мне нужно общее количество всех taskIds, присутствующих в collectionTwo. (Это требование). В приведенном выше сценарии только два taskIds коллекцииOne присутствуют в collectionTwo, поэтому мне нужен вывод как {"count": 2} –

 Смежные вопросы

  • Нет связанных вопросов^_^