MongoDB 3.6- Как добавить совпадения из одной коллекции в другую? - PullRequest
0 голосов
/ 14 января 2019

Коллекция 1 - Линии счетов Коллекция 2 - Налоговые линии

Случай: с 1 строкой накладной может быть связано более одной строки налога.

Как я могу получить запись из 1 строки счета-фактуры, в которую будут добавлены все соответствующие налоговые строки?

Между строкой счета-фактуры и строкой налога имеется соответствующий ключ. Сейчас мое объединение создает 2 результирующие записи строки счета-фактуры (дублирующую строку счета-фактуры с соответствующей строкой налога) вместо добавления соответствующих строк налога в одну запись строки счета-фактуры.

Графическое изображение текущих коллекций и примеры документов.


Образец документа строки счета-фактуры ...

{ 
    "UniqueID" : NumberInt(3851963), 
    "InvNum" : NumberInt(35602582), 
    "Location" : "035", 
    "InvoiceDate" : ISODate("2017-07-15T12:00:00.000+0000"), 
    "LINEITEM" : NumberInt(1), 
    "CUSTID" : "001595", 
    "DEPTID" : "035360", 
    "PRODID" : "003600", 
    "ProdDesc" : "MISC MERCHANDISE", 
 }

Образец документа «Налоговые строки» (необходимо добавить оба к строке «Счет-фактура» выше) ... Налоговая строка документа 1

{ 
    "InvoiceDate" : "7/15/2017 12:00:00 AM", 
    "Location" : "035", 
    "InvNum" : NumberInt(35602582), 
    "LineItem" : NumberInt(1), 
    "UniqueID" : NumberInt(1), 
    "taxCode" : "mu48", 
    "taxrate" : NumberInt(2), 
}

Документ строки налога 2

{ 
    "InvoiceDate" : "7/15/2017 12:00:00 AM", 
    "Location" : "035", 
    "InvNum" : NumberInt(35602582), 
    "LineItem" : NumberInt(1), 
    "UniqueID" : NumberInt(1), 
    "taxCode" : "mu48", 
    "taxrate" : NumberInt(2), 
}

1 Ответ

0 голосов
/ 16 января 2019

Вы можете использовать ниже aggregation с mongodb 3,6 и выше

db.invoice.aggregate([
  { "$lookup": {
    "from": "tax",
    "let": { "invNum": "$InvNum", "lINEITEM": "$LINEITEM" },
    "pipeline": [
      { "$match": {
        "$expr": {
          "$and": [
            { "$eq": ["$InvNum", "$$invNum"] },
            { "$eq": ["$LineItem", "$$lINEITEM"] }
          ]
        }
      }}
    ],
    "as": "taxes"
  }}
])
...