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参数,减少数据量的扫描)。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐