首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >快递+猫鼬+聚合+计算可用库存

快递+猫鼬+聚合+计算可用库存
EN

Stack Overflow用户
提问于 2021-05-15 13:43:16
回答 1查看 159关注 0票数 1

我使用的是快车和猫鼬,我是这些平台的新手。如果有人能在这件事上帮我,那就太好了。请参考下面的数据,我正在寻找输出,如:

代码语言:javascript
复制
itemsizeId: 609578ca23033e55886e7590, AvailableQuantity: 112

itemsizeId: 609578ca23033e55886e758f, AvailableQuantity: 495

注:按移动类型分组(内向/向外)。

存货:进货-离港

代码语言:javascript
复制
[
  {
    _id: '609fb1a1a7ed990f30d6cae2',
    refId: 'Purchase-1',
    itemsizeId: '609578ca23033e55886e7590',
    itemId: '609578ca23033e55886e758e',
    sizeId: '60950c0ba4982390f8dfed79',
    movementdate: '2021-05-15T11:33:52.894Z',
    movementtype: 'inward',
    movementcategory: 'purchase',
    quantity: 100,
    id: '609fb1a1a7ed990f30d6cae2',
  },
  {
    _id: '609fb1cba7ed990f30d6cae3',
    refId: 'Purchase-2',
    itemsizeId: '609578ca23033e55886e7590',
    itemId: '609578ca23033e55886e758e',
    sizeId: '60950c0ba4982390f8dfed79',
    movementdate: '2021-05-15T11:34:35.118Z',
    movementtype: 'inward',
    movementcategory: 'purchase',
    quantity: 20,
    id: '609fb1cba7ed990f30d6cae3',
  },
  {
    _id: '609fb1fda7ed990f30d6cae4',
    refId: 'Sale-1',
    itemsizeId: '609578ca23033e55886e7590',
    itemId: '609578ca23033e55886e758e',
    sizeId: '60950c0ba4982390f8dfed79',
    movementdate: '2021-05-15T11:35:25.068Z',
    movementtype: 'outward',
    movementcategory: 'sales',
    quantity: 5,
    id: '609fb1fda7ed990f30d6cae4',
  },
  {
    _id: '609fb255a7ed990f30d6cae5',
    refId: 'Purchase-3',
    itemsizeId: '609578ca23033e55886e758f',
    itemId: '609578ca23033e55886e758e',
    sizeId: '60950be9a4982390f8dfed78',
    movementdate: '2021-05-15T11:36:53.835Z',
    movementtype: 'inward',
    movementcategory: 'purchase',
    quantity: 500,
    id: '609fb255a7ed990f30d6cae5',
  },
  {
    _id: '609fb27ea7ed990f30d6cae6',
    refId: 'Sale-2',
    itemsizeId: '609578ca23033e55886e758f',
    itemId: '609578ca23033e55886e758e',
    sizeId: '60950be9a4982390f8dfed78',
    movementdate: '2021-05-15T11:37:34.066Z',
    movementtype: 'outward',
    movementcategory: 'sales',
    quantity: 8,
    id: '609fb27ea7ed990f30d6cae6',
  },
]

我已经尝试过了,直到下面的代码,我被击中完成它:

代码语言:javascript
复制
const itemStock = await itemStockMovementModel.aggregate([
  {
    $match: { movementtype: 'inward' },
  },
  {
    $group: {
      _id: {
        itemsizeId: '$itemsizeId',
      },
      quantity: { $sum: '$quantity' },
    },
  },
])
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-15 14:02:12

  • $group通过itemsizeIdinwardoutward按条件求出数量和
  • $subtract to inward - outward
代码语言:javascript
复制
const itemStock = await itemStockMovementModel.aggregate([
  {
    $group: {
      _id: "$itemsizeId",
      inward: {
        $sum: { $cond: [{ $eq: ["$movementtype", "inward"] }, "$quantity", 0] }
      },
      outward: {
        $sum: { $cond: [{ $eq: ["$movementtype", "outward"] }, "$quantity", 0] }
      }
    }
  },
  {
    $project: {
      quantity: {
        $subtract: ["$inward", "$outward"]
      }
    }
  }
])

游乐场

您也可以使用第二个公式,如果您在movementtype中没有第三个类型,

  • $group by itemsizeId
  • 检查条件,如果movementtypeinward,那么和quantity,否则和负quantity
代码语言:javascript
复制
const itemStock = await itemStockMovementModel.aggregate([
  {
    $group: {
      _id: "$itemsizeId",
      quantity: {
        $sum: {
          $cond: [
            { $eq: ["$movementtype", "inward"] },
            "$quantity",
            { $subtract: [0, "$quantity"] }
          ]
        }
      }
    }
  }
])

游乐场

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67547353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档