1

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

例子:

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

超集将是:{"firstName", "lastName", "age", "state", "country"}

+1

能否请你在与你的努力的内容更好的标题和更详细的信息? – manetsus

回答

1

你可以尝试运行一个精简操作,将输入返回集合中的所有给定文件键作为结果文档的_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");