У меня есть коллекция, подобная приведенной ниже, с коллекцией, и я хочу сгруппировать ее с идентификатором, что элемент не имеет parentId. Может мне помочь?
let item=[
{id:'001', name:'A', qty:10,},
{id:'002', name:'B', qty:5, parentId:'001'},
{id:'003', name:'C', qty:8, parentId:'001'},
{id:'001', name:'A', qty:-5,},
{id:'002', name:'B', qty:-5, parentId:'001'},
{id:'003', name:'C', qty:-8, parentId:'001'}
]
Я хочу сгруппировать только элемент без parentId, это мой результат.
let item=[
{id:'001', name:'A', qty:5,},
{id:'002', name:'B', qty:5, parentId:'001'},
{id:'003', name:'C', qty:8, parentId:'001'}
]
Ты можешь использовать
db.collectionName.aggregate([
{
$group: {
"_id": {
"id": "$id",
"parentId": "$parentId"
},
qtyArray: {
$push: {
"qty": "$qty",
}
}
}
},
{
$project: {
count: {
$cond: [
{
$not: ["$_id.parentId"]
},
{
"qtyTotal": { $sum: "$qtyArray.qty" }
},
{
$arrayElemAt: [ "$qtyArray", 0 ]
}
]
}
}
}
])
let item = [{
id: '001',
name: 'A',
qty: 10,
},
{
id: '002',
name: 'B',
qty: 5,
parentId: '001'
},
{
id: '003',
name: 'C',
qty: 8,
parentId: '001'
},
{
id: '001',
name: 'A',
qty: -5,
},
{
id: '002',
name: 'B',
qty: -5,
parentId: '001'
},
{
id: '003',
name: 'C',
qty: -8,
parentId: '001'
}
]
item = item.reduce((a, c) => {
const ex = a.find((v) => v.id === c.id)
if (ex) {
if (!ex.parentId) {
ex.qty += c.qty;
}
} else {
a.push(c);
}
return a;
}, [])
console.log(item);