2013-03-13 47 views
2

我有一个包含这个文件数据库:聚合:项目点现场似乎并没有工作

{"_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驱动程序,但服务器可能比这更老 - 也许大约半年?

回答

3

据对$project MongoDB的文档:

你也可以使用$项目,重命名字段。考虑以下 例如:

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

此操作重命名浏览量字段PAGE_VIEWS,并重命名其它子文件作为顶层 场栏在foo的字段。

这个例子似乎与你正在尝试做的事情相当好。

我知道10gen正式发布了MongoDB v2.2的聚合框架。看看current production release,我相信这是2.2.3。如果您使用的是以前的开发版本,那么聚合可能会出现一些奇怪的现象。

+0

啊,如果它全部被释放,那么我应该有它;重命名该字段(不使用“。”任何地方)工作得很好。只有在访问子域时才会有效。我会试着找出版本,因为它可能是我应该知道的! – 2013-03-13 20:38:42

0

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

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

我还没有尝试过槽python或php的驱动程序,但我以前的管道与最后pymongo工作得很好。