Java Mongo集合中所有文档中的字段超集
假设所有文档类型相同但字段数量不同,如何创建MongoDB单个集合中所有文档中存在的超级字段集(id除外) 例如:Java Mongo集合中所有文档中的字段超集,java,mongodb,mongodb-query,aggregation-framework,spring-mongodb,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”、“co
doc1 - {"_id":"test1", "firstName":"sample1", "age":24, "state":"Kansas"}
doc2 - {"_id":"test2", "lastName":"sample2", "age":24, "country":"US"}
超集将是:
{“firstName”、“lastName”、“age”、“state”、“country”}
您可以尝试运行mapReduce
操作,该操作将返回输入集合中的所有给定文档键作为结果文档的\u id
键。这将在输出集合中,您可以在\u 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");
//在collectionName上运行mapReduce
String map=“function(){for(此中的var key){emit(key,null);}}”;
String reduce=“函数(){}”;
MapReduceResults results=mongoTemplate.mapReduce(
“collectionName”,
地图,
减少
新建MapReduceOptions().outputCollection(“col_out”),
ValueObject.class
);
//从输出集合col_out中获取不同的键---
List fieldsPerset=mongoTemplate.getCollection(“col_out”).distinct(“\u id”);