У меня есть коллекция, подобная приведенной ниже, с коллекцией, и я хочу сгруппировать ее с идентификатором, который у элемента нет 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'}
]
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.info(item);
Можете ли вы пример с совокупным
Что вы имеете в виду под совокупностью? В javascript такого метода нет. @AneatTea
Глядя на теги, вопрос, по-видимому, сосредоточен на решении mongoDB. ОП задал вопрос запутанным образом и добавил тег js.
Я хочу, чтобы элемент с parentId получил только положительное число?
Вы можете использовать
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 ]
}
]
}
}
}
])
вы можете прочитать код здесь и узнать, как это сделать, хотя это не совсем то, что вам нужно: stackoverflow.com/questions/34523003/…