javascript - 如何按类型为 bundle 的 itemId 总和数量和类型为 sale_order javascript 的 parentId 进行分组?

标签 javascript mongodb aggregate

请帮助我处理我的收藏,我想要相同 itemId 和类型 bundle 的总和,以及类型为 Sale_Order 的 parentId,就像我下面的收藏一样。

`let item = [{
    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'
  }
]`

我想要这样的收藏。您可以看到类型为 bundle sum qty 的相同 itemId 和另一个类型为 parenId 的项目 bundle itemId 类型仅为 Sale_Order。

 `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'
  },`

最佳答案

您可以先检查具有 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; }

关于javascript - 如何按类型为 bundle 的 itemId 总和数量和类型为 sale_order javascript 的 parentId 进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52925952/

相关文章:

javascript - jQuery ajax 成功不适用于 $(this)?

javascript - 未捕获的安全错误 : Failed to execute 'getImageData' on 'CanvasRenderingContext2D' :

mongodb - mongo shell 使用外部编辑器编辑查询 : strange chars in Windows

sql - 如何将扩展加载到 SQLite 中?

python - 使用 pandas groupby 和聚合后使用 MultiIndex 访问列

javascript - 在 web View 中放置 svg 对象

javascript - 访问 localStorage 而不是 redux-store 的简单方法

javascript - 如何将带有objectId的二进制数据添加到mongoDB中?

mongodb - 如何在 Mongo 中独立地按日期和时间进行过滤?

r - 汇总每日内容