MongoDB для возврата отформатированного объекта, когда не удается найти результаты - PullRequest
1 голос
/ 05 марта 2020

У меня есть следующий этап в моем MongoDB конвейере агрегации, который возвращает кол-во и сумму продаж, которая отлично работает:

{
  $lookup: {
    from: 'sales',
    let: { part: '$_id' },
    pipeline: [
        { $match: { $and: [{ $expr: { $eq: ['$partner', '$$part'] } }] } },
        { $group: { _id: null, qty: { $sum: 1 }, soldFor: { $sum: '$soldFor' } } },
        { $project: { _id: 0, qty: 1, soldFor: 1 } }],
    as: 'sales'}},
    { $unwind: { path: '$sales', preserveNullAndEmptyArrays: true } },
    { $project: { _id: 1, sales: 1 }
}

Однако, если нет продаж, тогда $project projection возвращает пустой объект продаж, но мне бы очень хотелось, чтобы он возвращал завершенный объект, но с 0 - вот так:

{
  sales: {
    qty: 0,
    soldFor: 0
  }
}

1 Ответ

1 голос
/ 05 марта 2020

Вы можете использовать $cond оператор здесь

{
  "$project": {
    "_id": 1,
    "sales": {
      "$cond": [
        { "$eq": [{ "$size": "$sales" }, 0] },
        {
          "sales": {
            "qty": 0,
            "soldFor": 0
          }
        },
        "$sales"
      ]
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...