Mongodb Aggregate-按多个条件分组结果

时间:2019-06-23 03:37:07

标签: mongodb mongoose group-by aggregation-framework aggregation

我在使用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由用户创建的唯一序列号。 我要实现的是一种将具有相同productNumbers和具有相同序列号的产品归同一用户分组的方法。

例如,这就是我要实现的目标。

 [{
   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, ...}]
 }]

我无法告诉哪个卖家拥有产品。 谢谢。

0 个答案:

没有答案