如何在不包含使用聚合框架的其他字段的情况下排除_id

cri*_*res 2 mongodb aggregation-framework

我想得到没有_id字段的聚合管道的结果.我知道如果你明确提供其他字段作为投影的输出,这是可能的.但是,¿我怎样才能在查找电话中模仿$ projec?

这就是我想要的(没有明确包含的字段):

db.col.find({},{_id:0})
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

有没有想过解决这个问题?

Wir*_*rie 9

使用聚合时,必须显式包含/排除字段.因此,您需要列出所需的所有字段.它不等同于find.所以,你可能会:

db.sample.aggregate(
    { $project : {
        _id : 0,
        title : 1             
    }}
);
Run Code Online (Sandbox Code Playgroud)

使用聚合框架还有一些您应该注意的限制.它设计用于聚合​​(分组,求和等),因此在投影中有许多字段不是典型的(并且可能导致结果超过允许的最大值,即16MB).