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

标签 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"}

super 集为:{"firstName", "lastName", "age", "state", "country"}

最佳答案

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

下面的示例展示了这个概念:

// 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");

关于java - Mongo 集合中所有文档的字段超集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38789136/

相关文章:

java - SQL语句语法错误

java - 在 java servlet 应用程序中执行异步数据库任务

mongodb - 在 heroku 上部署 Meteor 1.0 应用程序后出现应用程序错误

java - 无法在 Android/Java 中解析来自 MongoDB 的日期字符串

mongodb - 如何$unwind嵌入文档(非列表)

node.js - Mongodb 排序返回未定义

java - Java中原始数据类型的MIN_VALUE和MAX_VALUE

java - 表格布局不适合屏幕

javascript - Nodejs Express Mongoose 连接到数据库错误

python - 如何使用pymongo在已经初始化的副本集中添加一个新节点?