Получить общий объем агрегированных данных в Mongoose - PullRequest
0 голосов
/ 13 января 2020

У меня есть 2 документа: Locations и Orders

Допустим, у меня есть 4 местоположения, и некоторые местоположения содержат заказы.

Я уже могу получить список мои местоположения с соответствующими заказами для каждого местоположения.

То, что я не могу сделать, - это включить количество заказов для каждого местоположения и общее пространство. (Каждый отдельный заказ уже содержит эту информацию)

Вот пн go Детская площадка с моим текущим кодом. Обратите внимание, что я хочу заполнить «сумму» и «сумму».

https://mongoplayground.net/p/FO_nYDOD1kn

Это то, что я использую для агрегирования моих данных:

db.Locations.aggregate([{
    $lookup: {
        from: "Orders",
        let: {
            loc_id: "$_id"
        },
        pipeline: [{
            $match: {
                $expr: {
                    $eq: ["$$loc_id", "$location"]
                }
            }
        }, {
            $project: {
                _id: 0,
                products: 1
            }
        }],
        as: "orders"
    }
}, {
    $project: {
        _id: 1,
        name: 1,
        orders: {
            total: "insert total orders expanses in this order",
            amount: "insert amount of orders for this location",
            orders: "$orders"
        }
    }
}])

и структура одного заказа:

{
  "_id": "5e17ab585eb7f11a971bce5c",
  "location": "5e17a001f1e0220def7a2b5d",
  "total": "1000"
}

1 Ответ

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

Хорошо, я заставил что-то работать! Yay!

Вот решение для тех, кто найдет это.

Location
.aggregate([
        {
          $lookup: {
            from: "orders",
            let: { loc_id: "$_id" },
            pipeline: [{ $match: { $expr: { $eq: ["$$loc_id", "$location"] } } }],
            as: "order"
          }
        }

        ,
        {
          $project: {
            _id: 1,
            name: 1,
            address: 1,
            orders: {
              total: { $sum: "$order.total" },
              amount: { $size: "$order" },
              items: "$order"
            }
          }
        }
      ])
      .then(locations => {
        res.status(200).json({
          success: true,
          locations
        })
      })
      .catch(error => {
        res.status(500).json({
          success: false,
          error
        })
      })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...