【问题标题】:mongodb java driver hide id field in aggregation/projection operationmongodb java驱动程序在聚合/投影操作中隐藏id字段
【发布时间】:2013-01-14 03:14:18
【问题描述】:

我正在使用 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 );

【问题讨论】:

    标签: java mongodb aggregation-framework


    【解决方案1】:

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

    【讨论】:

    • 我想把 _id 字段全部隐藏起来,我认为将 _id 作为投影中的 0 应该隐藏它
    • 查看 $group 步骤 - 它没有将 _id 传递给它,但您告诉它使用 $department 作为它将分组的 _id(或键)。原始 _id 出现在您的结果集中。
    • 对,但我不想在生成的 json 中显示 _id。我想按部门分组,但在输出中隐藏 _id 字段。
    • 您希望结果是什么样的?一个称为“平均”的字段?我猜你想要两个字段,一个叫做部门,一个叫做平均值。所以你需要 $project _iddepartment
    • 对,我实际上想要两个字段部门和平均值,但将其标记为部门,而不是 json 中的 _id
    猜你喜欢
    • 1970-01-01
    • 2017-03-06
    • 1970-01-01
    • 1970-01-01
    • 2021-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多