2013-01-14 40 views
4

我正在执行使用java mongodb驱动程序的聚合操作,并且我遵循了来自文档(粘贴在下面)的示例。据此,应隐藏_id字段。但是,根据我自己的代码以及本示例的输出的经验,即使将投影值设置为0(它可从mongo shell运行),_id字段也不会隐藏。有谁知道这是否是mongodb java驱动程序中的错误?或者我做错了什么?mongodb java驱动程序在汇总/投影操作中隐藏ID字段

// create our pipeline operations, first with the $match 
DBObject match = new BasicDBObject("$match", new BasicDBObject("type", "airfare")); 

// build the $projection operation 
DBObject fields = new BasicDBObject("department", 1); 
fields.put("amount", 1); 
fields.put("_id", 0); 
DBObject project = new BasicDBObject("$project", fields); 

// Now the $group operation 
DBObject groupFields = new BasicDBObject("_id", "$department"); 
groupFields.put("average", new BasicDBObject("$avg", "$amount")); 
DBObject group = new BasicDBObject("$group", groupFields); 

// run aggregation 
AggregationOutput output = collection.aggregate(match, project, group); 

回答

2

您在最后得到的_id字段来自$group运算符。如果您想将其重命名为部门,请将另一个$project添加到管道末端,并将_id转换为部门。

+0

我想隐藏所有_id字段,我认为在投影中将_id设置为0应该隐藏它 –

+0

看看$ group步骤 - 它没有让_id传递给它,但是您要告诉它使用$ department作为_id(或者键)来分组。原始的_id是*不存在于结果集中。 –

+0

没错,但我不想在结果的json中显示_id。我想按部门分组,但在输出中隐藏_id字段。 –

相关问题