【问题标题】:Simple grouping example with aggregate framework in MongodbMongodb中聚合框架的简单分组示例
【发布时间】:2013-11-26 05:06:29
【问题描述】:

因此,如果存在此问题,我深表歉意,我找不到适合我需要的答案,但我认为这很简单,不幸的是,尽管我断断续续地涉足过 Mongo 的非基本功能,但我仍然是新手过去 2 年。

我的数据: 我有一个集合,它是一组非常简单的文档,每个文档代表一个微芯片库存项目,这些芯片都有零件号、库存代码、日期代码和数量

(表示该项目何时生产的日期代码:0611 对于不熟悉的人通常表示 2011 年 6 月。)

对于运行搜索的 ed 用户来说,零件编号是最重要的数据,但是,零件编号可能会在集合中出现多次,因为它是股票代码(代表 PN + 日期代码)代表单个订单项。不幸的是,外部最终用户并没有对股票代码给出一个飞行的忽悠。

对于这个特定的搜索,我需要将所有零件号分组并返回所述零件号的总数量 - 对于这个特定的查找,我不需要日期代码。

基本上,从这三个文档中:

{pn:1234, 数量:200, datecode:0611, stockcode:1} {pn:1234, 数量:300, datecode:0411, stockcode:2} {pn:1254, 数量:100, datecode:0601, stockcode:3}

我需要我的查询产生:

{pn:1234, 数量:500} {pn:1254, 数量:100}

我的问题: 我的问题很简单,我似乎找不到使用聚合框架进行如此简单组的示例。一切都有更具体和更复杂(如果只是稍微)的例子。

我的代码: 我正在尝试的代码是这样的:

db.collection.aggregate( { $group :
                         { _id : "$pn",
                           total_qty : { $sum : "$qty" } } },
                       { $match : {qty : { $gte : 1 } } } )

这有意义吗?

提前感谢任何人。

【问题讨论】:

  • MongoDb 在education.mongodb.com 上提供免费的在线课程,你一定要看看。我自己刚刚完成了一个。
  • 谢谢,我去看看。以后我会越来越多地使用它。

标签: mongodb aggregation-framework


【解决方案1】:

当聚合管道到达您的 $match 时,文档将包含 _idtotal_qty 的字段,但您的匹配项位于 qty 上,而 qty 已不存在。所以改为total_qty

db.collection.aggregate(
    { $group : { _id : "$pn", total_qty : { $sum : "$qty" } } },
    { $match : {total_qty : { $gte : 1 } } }
)

【讨论】:

    【解决方案2】:

    聚合是一个管道,你应该传递一个阶段数组给它,在这种情况下,我们的第一个阶段是匹配,我们的第二个阶段是分组,所以我们应该像这样格式化它:

    db.collection.aggregate([ {$match: ... }, {$group: ... }])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-19
      • 2022-08-13
      • 2013-07-31
      • 1970-01-01
      • 2014-07-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多