使用聚合在每个文档mongodb中增加或减去一个字段

使用聚合在每个文档mongodb中增加或减去一个字段,mongodb,mongodb-query,Mongodb,Mongodb Query,我正在尝试查询我的数据库,但我不知道如何执行此查询。。。我试图知道我在每个文档的每个月都有一个产品的库存 我有这些文件 { _id: "6sdgsd5614sd12", type: 'purchase', date: '2020-04-11T20:33:14.021+00:00', products: [{ _id: "62360asadc2q622", price: 542, units:

我正在尝试查询我的数据库,但我不知道如何执行此查询。。。我试图知道我在每个文档的每个月都有一个产品的库存

我有这些文件

{
    _id: "6sdgsd5614sd12",
    type: 'purchase',
    date: '2020-04-11T20:33:14.021+00:00',
    products: [{
            _id: "62360asadc2q622",
            price: 542,
            units: 9
        }]
},
{
    _id: "34gf435345345f",
    type: 'purchase',
    date: '2020-04-12T50:51:14.691+00:00'.
    products: [{
            _id: "62360asadc2q622",
            price: 542,
            units: 5
        }]
},
{
    _id: "543g456g3344433",
    type: 'sales'
    date: '2020-04-13T20:12:14.011+00:00'
    products: [{
            _id: "62360asadc2q622",
            price: 542,
            units: 4
       }]
 },
现在我想在每个文档中添加一个字段,其中包含该特定文档中的库存,例如, 我的第一份文件是我买了9个单位,所以我的库存是9个,在第二份文件中我又买了5个单位,所以我的库存是14个,在最后一份文件中我卖出了4个,所以我的最终库存是10个。 这些文件按日期排序

我的预期结果是这样的输出

{
    _id: "6sdgsd5614sd12",
    type: 'purchase',
    date: '2020-04-11T20:33:14.021+00:00',
    products: [{
            _id: "62360asadc2q622",
            price: 542,
            units: 9,
            stock: 9
        }]
},
{
    _id: "34gf435345345f",
    type: 'purchase',
    date: '2020-04-12T50:51:14.691+00:00'.
    products: [{
            _id: "62360asadc2q622",
            price: 542,
            units: 5,
            stock: 14
        }]
},
{
    _id: "543g456g3344433",
    type: 'sales'
    date: '2020-04-13T20:12:14.011+00:00'
    products: [{
            _id: "62360asadc2q622",
            price: 542,
            units: 4,
            stock: 10
       }]
 },

我一直在尝试用$inc和$subtract进行聚合,但我不知道如何做,在匹配产品后,我使用$addFields,但运营商$inc我认为不在聚合中工作。。。有人知道我怎么做吗?救命啊。。。谢天谢地,问题是聚合不会在文档之间保留任何状态,因此当需要检查最后一份销售文档时,不会有状态变量告诉您手头有14份

您可以通过以下方式获得所需内容:

  • $sort
    按日期排序,以便一切都按正确顺序排列
  • $unwind
    products数组,因此每个文档只有一个产品
  • $group
    通过
    product\u id
    将原始文档添加到数组中
  • $addFields
    使用
    $reduce
    遍历数组并为每个元素提供库存总量
  • $unwind
    该数组
  • $group
    按原始
    \u id
    $push
    将产品记录推回数组