У меня проблемы с правильной группировкой данных с использованием метода агрегата в 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, ...}]
}]
У меня нет возможности сказать, какому продавцу принадлежит товар.Спасибо.