2013-03-13 51 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工作得很好。