Агрегация MongoDB в одной коллекции - PullRequest
0 голосов
/ 22 января 2020

Мне нужно получить значение из другого документа, и вот мои образцы документов:

[
  {
    "product_code": "0172745",
    "condition_type": "ZPRE",
    "price_group": "33",
    "visibility": "brp, network",
    "sales_org": "1010",
    "distr_channel": "10",
    "price_type": "dealer",
    "price_market": "na",
    "valid_from": "2019-07-01",
    "valid_to": "9999-12-31",
    "price_price_uom": "5.30",
    "price_uom": "PC",
    "price_sales_uom": "12.90",
    "sales_uom": "PC",
    "currency": "CAD",
    "last_change_date": "2020-01-17T20:14:15"
    }
  },
  {
    "product_code": "0172745",
    "condition_type": "ZPBA",
    "price_group": "2R",
    "visibility": "brp, network",
    "sales_org": "1010",
    "distr_channel": "10",
    "price_type": "dealer",
    "price_market": "na",
    "valid_from": "2019-07-01",
    "valid_to": "9999-12-31",
    "price_price_uom": "5.30",
    "price_uom": "PC",
    "price_sales_uom": "5.300",
    "sales_uom": "PC",
    "currency": "CAD",
    "last_change_date": "2020-01-17T20:14:15"
  }
]

Выходные данные должны быть document 2 + price_sales_uom из document 1, агрегация product_code и condition_type:

 {
    "product_code": "0172745",
    "condition_type": "ZPBA",
    "price_group": "2R",
    "price_sales_uom": "12.90"

  }

1 Ответ

0 голосов
/ 23 января 2020

Пожалуйста, попробуйте запрос ниже, это сгруппирует все документы на основе product_code:

db.collection.aggregate([
    {
        $group: {
            _id: '$product_code', product_code: { $first: '$product_code' },
            condition_type: { $last: '$condition_type' },
            price_group: { $last: '$price_group' },
            price_sales_uom: { $max: '$price_sales_uom' }
        }
    }, { $project: { _id: 0 } }])

Примечание: При заданном состоянии этого вопроса этот запрос предполагает получение максимума значение для price_sales_uom для совпавших документов (если оно должно быть из первого документа, используйте $first), аналогично condition_type, price_group извлекаются из последнего документа в группе, но для product_code действительно нет Неважно, $first или $last, как они будут одинаковыми.

...