聚合:项目虚线字段似乎不起作用

时间:2013-03-13 18:02:21

标签: mongodb aggregation-framework

我有一个包含此文档的数据库:

{"_id":{"$id":"xxx"},"duration":{"sec":137,"usec":0},"name":"test"}

如果我用这个管道调用db.collection.aggregate:

{$project:{_id: 0, name: 1, duration: 1, seconds: "$duration.sec"}}

我得到了这个结果:

{"result":[{"duration":{"sec":137,"usec":0},"name":"test"}],"ok":1}

为什么结果没有'秒'字段?我使用了错误的投影语法吗?

我不完全确定服务器正在运行的mongodb版本。我正在使用php 5.4.3的1.3.1 php驱动程序,但是服务器可能比这还要早 - 可能大约半年?

2 个答案:

答案 0 :(得分:3)

根据$project上的MongoDB文档:

  

您也可以使用$ project重命名字段。考虑以下   例如:

db.article.aggregate(
 { $project : {
     title : 1 ,
     page_views : "$pageViews" ,
     bar : "$other.foo"
 }} );
  

此操作将pageViews字段重命名为page_views,并将其他子文档中的foo字段重命名为顶级    现场酒吧。

这个例子似乎与你想要做的事情相匹配。

我知道10gen正式发布了MongoDB v2.2的聚合框架。查看current production release,我认为是2.2.3。如果您运行的是先前的开发版本,那么聚合可能会出现奇怪的现象。

答案 1 :(得分:0)

正如Bryce所说,我目前正在通过shell使用MongoDB 2.6,而$ project管道正在用于重命名嵌套字段。

db.article.aggregate({$project:{'_id': 0, 'name': 1, 'duration': 1, 'seconds': '$duration.sec'}}

我还没试过通过python或php驱动程序,但我以前的pymongo管道很好用。