如何打印 cursor.ForEach 中的文档?

How can I print document in cursor.ForEach?

我在某些集合上将一些简单的游标定义为 find()。

cursor = db.students.find()

学生有以下架构:

"_id" : 19,
"name" : "Gisela Levin",
"scores" : [
        {
                "type" : "exam",
                "score" : 44.51211101958831
        },
        {
                "type" : "quiz",
                "score" : 0.6578497966368002
        },
        {
                "type" : "homework",
                "score" : 93.36341655949683
        },
        {
                "type" : "homework",
                "score" : 49.43132782777443
        }
]

我想迭代光标并打印文档。我这样尝试:

cursor.forEach(function(o){print(o)})

它只打印这个:

[object Object]

如果我将循环修改为 select 一些简单的 属性 它会起作用:

cursor.forEach(function(o){print(o._id)})

尽管如果我将其更改为打印乐谱,它会打印以下内容:

[object Object],[object Object],[object Object],[object Object]

在mongodbshell中有打印json文档的功能吗?

我不确定为什么 pretty 不能适用于您的情况。

如果您手动使用游标,则需要使用 printjson 函数

db.collection.find().forEach(printjson)

或以下带过滤器表达式

db.collection.find({}, { "scores": 1, "_id": 0 }).forEach(printjson)

如果您的结果集很小,您可以将其放在一个集合中,然后对其进行迭代。

List<org.bson.Document> resultList = (List<org.bson.Document>) mongoCollection.find()
        .into(new ArrayList<org.bson.Document>());
resultList.forEach(doc -> printJson(doc));

而 printJson 是

public static void printJson(org.bson.Document doc) {
    JsonWriter jsonWriter = new JsonWriter(new StringWriter(), new JsonWriterSettings(JsonMode.SHELL, true));
    new DocumentCodec().encode(jsonWriter, doc,
            EncoderContext.builder().isEncodingCollectibleDocument(true).build());
    System.out.println(jsonWriter.getWriter());
    System.out.flush();
}