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

塞尔吉奥·卡诺

我正在尝试查询数据库,但是我不知道如何执行此查询...我正在尝试了解每个文档的每个组件中都有的产品库存

我有这些文件...

{
    _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 依日期排列,以便一切正确
  • $unwindproducts阵列,所以每个文档具有仅1个产品
  • $group通过product_id将原始文档添加到数组中
  • $addFields使用$reduce遍历数组,并给每个元素的总库存
  • $unwind 该数组
  • $group由原始_id$push产品记录备份到一个数组。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用并发类在Java中自动减少一个字段并自动增加另一个字段

mgo,mongodb:从嵌入式结构中查找与一个字段匹配的文档

MongoDB聚合错误:管道阶段规范对象必须仅包含一个字段

MongoDB:在一个字段上更新每个文档

Mongodb聚合在一个阶段中检索字段并在另一个阶段中使用它

elasticsearch动态查询-向返回的每个文档中添加另一个字段

MongoDB:如何为集合中的每个文档设置一个新字段,该字段等于另一个字段的值

从MongoDB中仅选择一个字段

MongoDB聚合查找仅返回数组的一个字段

我可以在一段时间后从mongoDB文档中删除一个字段吗?

RethinkDB Node.js-使用另一个对象从文档的每个字段中减去值

使用C#检索MongoDB文档并选择一个字段

MongoDB聚合:$ Project(如何在同一投影管道的另一个字段上使用一个字段)

查找来自一个字段的值不为null且不在另一个字段中的MongoDB文档

Mongodb $ project:排除子文档中除一个字段外的所有字段,其余保留

C#MongoDb-如何更新嵌套文档中的一个字段?

通过mongodb中的聚合和$ facet在每个文档中添加一个新字段

使用MongoDB聚合条件搜索字符串并与另一个字段连接

mongoDB $ set问题,使用文档的键值/另一个字段值

mongodb $ inc数组中的一个字段

根据MongoDB文档中的另一个字段更新一个字段(在Node.js中使用Mongoose)

在一个字段中按数组查找mongodb中的文档?

Elasticsearch将每个文档的ID更新为文档中另一个字段的值

从流星中的Mongodb文档返回一个字段(数组)的内容

在每个文档中添加一个新字段,并在mongodb中为同一文档的另一个字段赋值

HIVE试图加入一个字段并从另一个选择语句字段中减去一个字段

如何使用php在MongoDB文档中添加一个字段?

使用聚合将文档的一个字段与同一文档的数组大小进行匹配

如何使用 nodejs 通过 objectId 和 mongodb 中的另一个字段查找文档?