如何按类型id捆绑在一起的itemId和数量以及类型sale_order javascript的parentId分组?

时间:2018-10-22 09:17:41

标签: javascript mongodb aggregate

请帮助我处理我的集合,我希望对相同的itemId和类型bundle进行求和,并使用Sale_Order类型的parentId与下面的集合进行求和。

 `let item = [{
    id: '001',
    name: 'A',
    qty: 5,
    type:'bundle'        
  },
  {
    id: '002',
    name: 'B',
    qty: 5,
    parentId: '001'
    type:'Sale_Order'
  },
  {
    id: '002',
    name: 'B',
    qty: 4,
    parentId: '001'
    type:'Sale_Order'
  },
  {
    id: '003',
    name: 'C',
    qty: 8,
    parentId: '001'
    type:'Sale_Order'
  },`

我想要这样的收藏。您可以看到相同类型的bundleId为bundle sum sum的itemId,以及另一个具有parenId的项目,其形式为bundle itemId的类型为Sale_Order。

{{1}}

1 个答案:

答案 0 :(得分:0)

您可以先使用parentId检查对象,然后仅使用'Sale_Order'推送类型。

然后检查项目是否存在相同的id和相同的type,如果找到则更新qty或将实际对象的副本推送到结果集中。

var items = [{ id: '001', name: 'A', qty: 10, type: 'bundle' }, { id: '002', name: 'B', qty: 5, parentId: '001', type: 'Sale_Order' }, { id: '002', name: 'B', qty: 4, parentId: '001', type: 'Sale_Order' }, { id: '003', name: 'C', qty: 8, parentId: '001', type: 'Sale_Order' }, { id: '001', name: 'A', qty: -5, type: 'bundle' }, { id: '002', name: 'B', qty: -5, parentId: '001', type: 'Sale' }, { id: '002', name: 'B', qty: -4, parentId: '001', type: 'Sale' }, { id: '003', name: 'C', qty: -8, parentId: '001', type: 'Sale' }],
    result = items.reduce((r, o) => {
        if (o.parentId) {
            if (o.type === 'Sale_Order') {
                r.push(o);
            }
            return r;
        }
        let item = r.find(({ id, type }) => o.id === id && o.type === type);
        if (item) {
            item.qty += o.qty;
        } else {
            r.push(Object.assign({}, o));
        }
        return r;
    }, []);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }