mongoDB подсчитывает различные объекты после объединения 3 коллекций - PullRequest
0 голосов
/ 06 сентября 2018

MongoShell версия 4.0.2

У меня есть 3 коллекции с корреляцией данных между коллекциями

B:

{ 
    "_id" : ObjectId("5b8f83fb520b3ea906ac11d1"), 
    "X" : "002100367752", 
    "Z" : "002KV180054605",
} 

A:

{ 
    "_id" : ObjectId("5b8f83fa520b3e09e7ac0de1"), 
    "Y" : "002100367752" 
}

C:

{ 
    "_id" : ObjectId("5b8f83fb520b3e0127ac15b9"), 
    "N" : "002KV180054605", 
    "Q" : 17, 
    "W" : 1, 
    "E" : 35 
}

Соединение выглядит так:

Collection A <> Collection B <> Collection C

Только в коллекции B У меня есть ID объектов из всех 3 коллекций

Теперь я хочу подсчитать различное количество объектов в коллекции A, которые связаны через коллекцию B, с объектами из коллекции C, которые имеют определенные параметры.

Это означает, что мой счетчик должен возвращать количество различных объектов из коллекции A, которые могут иметь несколько соединений с объектами из коллекции C

Connection schema

Если я сделаю запрос, как показано ниже, я не получу результатов:

db.B.aggregate([
   {
      $lookup:
         {
            from: "A",
            localField: "X",
            foreignField: "Y",
            as: "Acc"
        }
   },
   {
      $match: { "Acc": { $ne: [] } }
   },
   {
      $lookup:
         {
            from: "C",
            localField: "Z",
            foreignField: "N",
            as: "Con"
        }
   },
   {
      $match: { "Con": { Q: 1, W: 1, E: 9 } }
   }
])

Кроме того, я не знаю, как подсчитать для этого запроса

1 Ответ

0 голосов
/ 11 сентября 2018

Я думаю, что это мое решение:

    db.idlsfcontractroles.aggregate([
  {"$lookup":{
    "from":"idlsfcontracts",
    "localField":"Contract__r_ExternalId__c",
    "foreignField":"ExternalId__c",
    "as":"Con"
  }},
  {"$unwind":"$Con"},
  {"$match":{"Con.Status__c":1,"Con.Type__c":1,"Con.ConductingCompany__c":31}},
  {"$group":{"_id": null, uniqueValues: {$addToSet: "$Account__r_MDMExternalId__c"}}},
  {"$project": {"_id": 1, numberOfParties: { $size: "$uniqueValues" }}}
])
...