2013-10-07 16 views
1

我想得到沒有_id字段的聚合管道的結果。我知道這是可能的,如果你明確提供其他字段將是投影的輸出。但是,我怎樣才能在查找電話中模擬$ projec?如何在不包含使用聚合框架的其他字段的情況下排除_id

這就是我想要的(沒有明確的領域包括):

db.col.find({},{_id:0}) 

但是在聚合框架似乎是不可能的:

db.col.aggregate([{'$project': {_id:0}}]) 

Error: Printing Stack Trace 
    at printStackTrace (src/mongo/shell/utils.js:37:15) 
    at DBCollection.aggregate (src/mongo/shell/collection.js:927:9) 
    at (shell):1:11 
2013-10-07T16:36:09.273+0200 aggregate failed: { 
    "errmsg" : "exception: $projection requires at least one output field", 
    "code" : 16403, 
    "ok" : 0 
} at src/mongo/shell/collection.js:928 

任何想法來解決這個問題?

回答

4

使用聚合時,您必須明確地include/exclude fields。所以,你需要列出你想要的所有字段。這不等同於find。所以,你可能:

db.sample.aggregate(
    { $project : { 
     _id : 0, 
     title : 1    
    }} 
); 

使用聚合框架還附帶了一些limits你應該知道的。它專爲聚合(分組,彙總等)而設計,因此在投影中有許多字段不是典型的(並且可能導致結果超過允許的最大值,即16MB)。

+0

Mongodb 2.6將克服這些限制......「通過返回遊標,聚合管道可以返回任意大小的結果集」http://docs.mongodb.org/manual/release-note/2.6/ 我是嘗試2.5.2但仍然需要明確包含字段。很遺憾。 ( – crispamares

+0

)當然,未來的版本可能會取消這些限制,但現在,這就是它的原因,聚合框架仍然適用於分組等,在這些情況下,返回許多字段通常沒有意義。 – WiredPrairie

相關問題