3

我想获得没有 _id 归档的聚合管道的结果。我知道如果您明确提供将作为投影输出的其他字段,这是可能的。但是,¿如何在 find 调用中模仿 $projec?

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

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

1 回答 1

11

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

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

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

于 2013-10-07T15:21:22.733 回答