所以我道歉,如果这个问题存在,我找不到适合我需要的答案,但我认为这很简单,不幸的是我仍然对Mongo的非基本功能不熟悉,尽管已经涉足到它在过去的两年里。
我的数据: 我有一个非常简单的文档集合,每个文档代表微芯片库存的行项目,芯片都有部件号,股票代码,日期代码和数量
(日期代码表明该项目何时生成:0611通常意味着2011年6月对于那些不熟悉的人。)
部件号是运行搜索的ed用户最重要的数据,但是,部件号可能会在集合中多次显示,因为它是代表PN +日期代码的股票代码(代表PN +日期代码)单个订单项。不幸的是,外部最终用户没有对股票代码提供飞行的捏造。
对于此特定搜索,我需要对所有部件号进行分组并返回所述部件号的总数量 - 对于此特定查找,我不需要日期代码。
基本上,从这三个文档:
{pn:1234,数量:200,日期代码:0611,股票代码:1} {pn:1234,数量:300,日期代码:0411,股票代码:2} {pn:1254,数量:100,日期代码:0601,股票代码:3}
我需要我的查询来产生:
{pn:1234,数量:500} {pn:1254,数量:100}
我的问题: 我的问题非常简单,我似乎无法找到使用聚合框架做这样一个简单组的示例。一切都有更具体和复杂(如果只是略微)的例子。
我的代码: 我正在尝试的代码是:
db.collection.aggregate( { $group :
{ _id : "$pn",
total_qty : { $sum : "$qty" } } },
{ $match : {qty : { $gte : 1 } } } )
这有意义吗?
先感谢任何人。
答案 0 :(得分:2)
当汇总管道到达您的$match
时,文档将包含_id
和total_qty
字段,但您的匹配位于qty
,不再存在。因此,请将其更改为total_qty
:
db.collection.aggregate(
{ $group : { _id : "$pn", total_qty : { $sum : "$qty" } } },
{ $match : {total_qty : { $gte : 1 } } }
)
答案 1 :(得分:0)
聚合是一个管道,你应该传递一个阶段数组,在这种情况下我们的第一阶段是匹配,我们的第二阶段是分组,所以我们应该像这样格式化:
CPLEX Error 1262: No basis exists.