Как сгруппировать элемент по идентификатору только с элементом, который не содержит parentId, а элемент с parentId оставить первым?

1

У меня есть коллекция, подобная приведенной ниже, с коллекцией, и я хочу сгруппировать ее с идентификатором, что элемент не имеет 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'}
         ]
  • 0
    вы можете прочитать код здесь и узнать, как это сделать, хотя это не совсем то, что вам нужно: stackoverflow.com/questions/34523003/…
Теги:
aggregate

2 ответа

0
Лучший ответ

Ты можешь использовать

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 ]
                    }
                ]
            }

        }
    }
])
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);
  • 0
    Можете ли вы привести пример с совокупностью
  • 0
    Что вы подразумеваете под совокупностью? Там нет такого метода в JavaScript. @AneatTea
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню