Как я могу сделать с MonboDB vlookup между двумя вложенными документами из разных коллекций? - PullRequest
0 голосов
/ 14 июля 2020

У меня есть две коллекции: List и ListSnapshot (взятые изо дня в день).

-List

{
  _id: { $oid: "5f0d71fc9037e9858c96f131" },
  list: [
    {
      _id: { $oid: "5f0d71fc9037e9858c96f132" },
      name: "Item1",
      id: "I2WQDFU7Z8C15E",
      link: "https://www.ecomm1.heroku.com",
      price: 44.99,
    },
    {
      _id: { $oid: "5f0d71fc9037e9858c96f133" },
      name: "Item2",
      id: "I194JQPIWR0CY5",
      link: "https://www.ecomm1.heroku.com",
      price: 30.99,
    },
  ],
  creationDate: { $date: "2020-07-14T08:51:01.443Z" },
  user: "713cdd45df7a6b979643b0a6f4d5be52bef1ea48e7c26088d88c50ac06c1b155",
  id: "366c83ffc8be98f4de043629b5dcacb607d80f560cdd5741927c7d5a80513b0f",
  __v: 0,
}

-ListSnapshot

{
  _id: { $oid: "5f0d824e7e777e44d8115ddc" },
  list: [
    {
      _id: { $oid: "5f0d824e7e777e44d8115ddd" },
      name: "Item1",
      id: "I2WQDFU7Z8C15E",
      price: 54.99,
    },
    {
      _id: { $oid: "5f0d824e7e777e44d8115dde" },
      name: "Item2",
      id: "I194JQPIWR0CY5",
      price: 10.99,
    },
  ],
  date: { $date: "2020-07-14T10:00:42.744Z" },
  user: "713cdd45df7a6b979643b0a6f4d5be52bef1ea48e7c26088d88c50ac06c1b155",
  id: "366c83ffc8be98f4de043629b5dcacb607d80f560cdd5741927c7d5a80513b0f",
  __v: 0,
}

Я выполняю агрегирование с совпадением по идентификатору "List", а затем я группирую по list.id для вычисления некоторых значений лайков (avg, max, et c ..) для каждого элемента. Я хочу добавить поле ссылки «Список» к моему результату.

await collection.aggregate(
  [
    { $match: { [filter]: group } },
    { $unwind: "$list" },
    { $sort: { date: 1 } },
    {
      $group: {
        _id: { id: "$list.id", name: "$list.name" },
        ossNumb: { $sum: 1 },
        avgValue: { $avg: "$list.price" },
        maxValue: { $max: "$list.price" },
        minValue: { $min: "$list.price" },
        startValue: { $first: "$list.price" },
        lastValue: { $last: "$list.price" },
        dev: { $stdDevPop: "$list.price" },
      },
    },
  ],
  async function (err, queryRes) {
    if (err) {
      throw err;
      return err;
    }

    const queryResToArray = await queryRes.toArray();
    resolve(queryResToArray);
  }
);

Это текущий результат:

{"_id":{"id":"I1PF32XECEDXKQ","name":"Items1"},"avgValue":29.99,"dev":0,"lastValue":"29.99","maxValue":"29.99","minValue":"29.99","ossNumb":1,"startValue":29.99}

Мне нужно добавить ссылку из «Списка»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...