Mongodb Aggregate - группировка результатов по нескольким условиям - PullRequest
0 голосов
/ 23 июня 2019

У меня проблемы с правильной группировкой данных с использованием метода агрегата в MongoDB.У меня есть такая схема

const ProductSchema = new Schema({
 productNum: { type: String, required: true },
 serialNum: {type: String, unique: true},
 price: Number,
 condition: { type: String, required: true },
 seller: { type: Schema.Types.ObjectId, ref: "User" }
})

Продукты могут иметь тот же productNum, но уникальные серийные номера для productNum, созданные пользователем.То, чего я хочу достичь, - это способ группировки продуктов с одинаковыми номерами продуктов и их серийными номерами одним и тем же пользователем.

Например, вот чего я хочу достичь.

 [{
   productNum: Product-1,
   seller: 'SELLER-ONE-populated',
   parts: [{serialNumber: 1, ...},{ serialNumber 2, ...}]
  },
 {
  productNum: Product-1,
  seller: 'SELLER-TWO-populated',
  parts: [{serialNumber: 3, ...},{ serialNumber 4, ...}]
 },
{
  productNum: Product-2,
  seller: 'SELLER-ONE-populated',
  parts: [{serialNumber: 21, ...},{ serialNumber 22, ...}]
 }]

Этоэто код, который я написал

const query = { _id: "$productNum", parts: { $push: "$$ROOT" } };
db.Model.aggregate([
      { $group: query },
      {
        $lookup: {
          from: "users",
          as: "seller",
          let: {
            id: "$_id.str"
          },
          pipeline: [
            { $match: { $expr: { $eq: ["$seller", "$$id"] } } },
            {
              $project: {
                emailVerified: 0
              }
            }
          ]
        }
      },
      { $skip: skip },
      { $limit: limit }
    ])

Я получаю следующие результаты:

[{
   productNum: Product-1,
   seller: ['SELLER-ONE-populated', 'SELLER-TWO-populated'],
   parts: [{serialNumber: 1, ...},{ serialNumber 2, ...},
           {serialNumber: 3, ...},{ serialNumber 4, ...}]
  },
 {
  productNum: Product-(2),
  seller: ['SELLER-ONE-populated', 'SELLER-TWO-populated'],
  parts: [{serialNumber: 21, ...},{ serialNumber 22, ...}]
 }]

У меня нет возможности сказать, какому продавцу принадлежит товар.Спасибо.

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