MongoDB Java驱动程序如何在聚合/投影操作中隐藏ID字段

4
我正在使用Java MongoDB驱动程序执行聚合操作,并按照文档中的示例进行操作(如下所示)。根据该示例,_id字段应该被隐藏。然而,在我的代码以及此示例的输出中,即使将投影值设置为0,_id字段也不会被隐藏(在Mongo Shell中可以工作)。有人知道这是否是Mongodb Java驱动程序中的缺陷吗?或者我做错了什么?
// 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 );
1个回答

2

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


没错,但我不想在结果JSON中显示_id。我想按部门分组,但在输出中隐藏_id字段。 - Jeff Storey
1
你想要的结果是什么样子?只有一个名为“average”的字段吗?我猜你想要两个字段,一个叫做department,一个叫做average。所以你需要将_id投影到department - Asya Kamsky
哦,那就是你原来的答案说的,我现在明白了。谢谢。 - Jeff Storey
这就是为什么您需要向管道添加另一个步骤,即(在JSON中){$project:{department:"$_id", average:1} } - Asya Kamsky
它将 $group 中出现的 _id 字段重命名为 department。有些投影比其他投影更复杂,而这个非常简单。 - Asya Kamsky
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接