我有一个包含此文档的数据库:
{"_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驱动程序,但是服务器可能比这还要早 - 可能大约半年?
答案 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管道很好用。