集合中所有文档中字段的超集 Mongo
Superset of fields in all documents in a collection Mongo
假设所有文档的类型相同但字段数量不同,如何创建一组字段的超集(_id
除外)出现在 MongoDB 的单个集合中的所有文档中。
示例:
doc1 - {"_id":"test1", "firstName":"sample1", "age":24, "state":"Kansas"}
doc2 - {"_id":"test2", "lastName":"sample2", "age":24, "country":"US"}
超级集将是:{"firstName", "lastName", "age", "state", "country"}
您可以尝试 运行 mapReduce
操作,该操作将 return 输入集合中的所有给定文档键 作为 _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");
假设所有文档的类型相同但字段数量不同,如何创建一组字段的超集(_id
除外)出现在 MongoDB 的单个集合中的所有文档中。
示例:
doc1 - {"_id":"test1", "firstName":"sample1", "age":24, "state":"Kansas"}
doc2 - {"_id":"test2", "lastName":"sample2", "age":24, "country":"US"}
超级集将是:{"firstName", "lastName", "age", "state", "country"}
您可以尝试 运行 mapReduce
操作,该操作将 return 输入集合中的所有给定文档键 作为 _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");