使用Java从MongoDB返回多个文档

时间:2017-10-30 17:52:48

标签: java json mongodb

我一直在万维网上搜索几个小时,我找不到解决问题的可行方案:

很简单:我想搜索MongoDB中的一组项目并返回所有文档。

从RESTFul API角度来看: GET / items - 返回集合中的所有项目。未排序

// NOT WORKING - STILL TRYING  
    public static String getItems() {

        StringBuilder items = new StringBuilder();
    MongoCursor<Document> cursor = itemCollection.find().iterator();
    try {

        while (cursor.hasNext()) {
            items.append(cursor.next().toJson());

        }

    } finally {
        cursor.close();
    }

    return items.toString();
    }

正如您所看到的,我返回一个StringBuilder,因为我想将每个文档连接成一个大块。但这将返回 TEXT 而不是 JSON 。见下文:

这是将读取类型设置为JSON
When JSON is set as read type

以下是当读取类型设置为TEXT时,它会创建我需要的输出,但格式不正确。

When TEXT is set as read type

我无法将其作为Document返回,然后使用方法: toJson(),因为它只返回最后一个条目。 我已尝试使用Lists,但无法将其转换为JSON文档。 以上是我最接近我需要的东西。

我希望这里有人和我一样经历同样的问题,并且可以快速提示解决我遇到的问题: - )。

3 个答案:

答案 0 :(得分:2)

您可以在List中收集JSON字符串,并将该列表格式化为JSON数组字符串:

public static String getItems() {
    List<String> items = new ArrayList<>();
    MongoCursor<Document> cursor = itemCollection.find().iterator();
    try {
        while (cursor.hasNext()) {
            items.add(cursor.next().toJson());
        }
    } finally {
        cursor.close();
    }

    return "[" + String.join(", ", items) + "]";
}

答案 1 :(得分:1)

您必须修改代码才能正确形成JSON对象集合

    while (cursor.hasNext()) {
        items.append(cursor.next().toJson());

    }

为您构建下一个输出:

{json object1}{json object2}...{json objectN}

虽然你需要

[{json object1},{json object2}, ... {json objectN}]

在连接JSON时,您错过了[,]

答案 2 :(得分:0)

根据Aleh Maksimovich的回答,我可以告诉你,我通过在每个文档之间用逗号更正它并将其全部包含在文档数组中来解决问题。

以下是解决方案的代码:

/**
 * This method is used to retrieve all the items in the item collection
 * @return - A String which contains all the documents. 
 */
public static String getItems() {

    StringBuilder items = new StringBuilder();
    MongoCursor<Document> cursor = itemCollection.find().iterator();
    try {

        items.append("[");
        while (cursor.hasNext()) {

            items.append(cursor.next().toJson());
            if(cursor.hasNext()) {
                items.append(",");
            }
        }
        items.append("]");
    } finally {
        cursor.close();
    }

    return items.toString();
}

感谢您的贡献并度过了愉快的夜晚。