MongoDB之MapReduce获取集合的所有字段
MongoDB MapReduce 查看MongoDB集合的所有字段
·
pom依赖
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-sync</artifactId>
<version>4.7.1</version>
</dependency>
实操代码
package flink.generateStream.MongoDB;
import com.mongodb.MongoException;
import com.mongodb.client.*;
import com.mongodb.client.model.Projections;
import org.bson.*;
import org.bson.conversions.Bson;
public class Test1 {
public static void main(String[] args) {
// Replace the uri string with your MongoDB deployment's connection string
String uri = "mongodb://localhost:27017/";
try (MongoClient mongoClient = MongoClients.create(uri)) {
MongoDatabase database = mongoClient.getDatabase("runoob");
try {
//mytest_k:经过MapReduce处理结果存放的集合
BsonDocument outputDocument = new BsonDocument("replace", new BsonString("mytest_k"));
BsonDocument commandDocument = new BsonDocument("mapreduce", new BsonString("mytest"))
.append("map", new BsonJavaScript("function() {\n" +
" for (var myKey in this) { emit(myKey, null); }\n" +
" }")) //map函数
.append("reduce", new BsonJavaScript("function(myKey, s) { return null; }")) //reduce 函数
.append("out", outputDocument);
//限制扫描的数据量
commandDocument.put("limit", new BsonInt32(100));
//执行MapReduce操作
database.runCommand(commandDocument);
//对结果集合进行遍历
Bson projectionFields = Projections.fields(
Projections.include("_id"));
FindIterable<Document> mytest_k = database.getCollection("mytest_k").find().projection(projectionFields);
mytest_k.forEach(document -> System.out.println("document = " + document.toJson()));
} catch (MongoException me) {
System.err.println("An error occurred: " + me);
}
}
}
}
结果展示
document = {"_id": "likes"} document = {"_id": "_id"} document = {"_id": "age"} document = {"_id": "school"} document = {"_id": "title"} document = {"_id": "description"} document = {"_id": "by"} document = {"_id": "name"} document = {"_id": "url"} document = {"_id": "tags"}
总结
优点:可以获取到没有值的字段
缺点:是会全表扫描,如果数据量大,耗时比较久(可以通过设置limit参数,减少数据量的扫描)。
更多推荐
已为社区贡献2条内容
所有评论(0)