在Mongo集合中的所有文档中的字段的超集

时间:2016-08-05 12:21:14

标签: java mongodb mongodb-query aggregation-framework spring-mongodb

如何在单个MongoDB集合中的所有文档中创建一组超级字段(_id除外),假设所有文档的类型相同但字段数不同。

示例:

doc1 - {"_id":"test1", "firstName":"sample1", "age":24, "state":"Kansas"}
doc2 - {"_id":"test2", "lastName":"sample2", "age":24, "country":"US"}

超级套装将是:{"firstName", "lastName", "age", "state", "country"}

1 个答案:

答案 0 :(得分:2)

您可以尝试运行mapReduce 操作,该操作将返回输入集合中的所有给定文档键,作为结果文档的_id键。这将在输出集合中,然后您可以在_id字段上应用distinct命令以检索字段的超集。

以下示例显示了这一概念:

// Run mapReduce on collectionName
String map = "function () { for (var key in this) { emit(key, null); } }";
String reduce = "function () {}";
MapReduceResults<ValueObject> results = mongoTemplate.mapReduce(
    "collectionName", 
    map, 
    reduce,
    new MapReduceOptions().outputCollection("col_out"), 
    ValueObject.class
);
// Get the distinct keys from output collection col_out ---
List<String> fieldsSuperset = mongoTemplate.getCollection("col_out").distinct("_id");