当前位置: 首页 > 知识库问答 >
问题:

使用Java将JSON文档数组插入MongoDB时出错

裴威
2023-03-14

我试图插入一个json字符串,它包含一个文档数组,但得到以下异常。

MongoDB服务器版本:3.0.6

Mongo-Java驱动程序版本:3.1.0

我知道insertone()方法只用于插入一个文档,但这里是一个数组文档。我不确定在这里如何使用insertmany()方法。

请引导。

要插入的JSON字符串:

json = [{"freightCompanyId":201,"name":"USPS","price":8.00},{"freightCompanyId":202,"name":"FedEx","price":10.00},{"freightCompanyId":203,"name":"UPS","price":12.00},{"freightCompanyId":204,"name":"Other","price":15.00}]

异常日志:

Exception in thread "main" org.bson.BsonInvalidOperationException: readStartDocument can only be called when CurrentBSONType is DOCUMENT, not when CurrentBSONType is ARRAY.
    at org.bson.AbstractBsonReader.verifyBSONType(AbstractBsonReader.java:655)
    at org.bson.AbstractBsonReader.checkPreconditions(AbstractBsonReader.java:687)
    at org.bson.AbstractBsonReader.readStartDocument(AbstractBsonReader.java:421)
    at org.bson.codecs.DocumentCodec.decode(DocumentCodec.java:138)
    at org.bson.codecs.DocumentCodec.decode(DocumentCodec.java:45)
    at org.bson.Document.parse(Document.java:105)
    at org.bson.Document.parse(Document.java:90)
    at com.ebayenterprise.ecp.jobs.Main.insert(Main.java:52)
    at com.ebayenterprise.ecp.jobs.Main.main(Main.java:31)

main.java

public class Main {

    private static final Logger LOG = Logger.getLogger(Main.class);

    public static void main(String[] args) throws IOException {
        String json = getAllFreightCompanies();
        insert(json);
    }

    private static String getAllFreightCompanies() throws IOException {
        FreightCompanyDao freightCompanyDao = new FreightCompanyDaoImpl(DataSourceFactory.getDataSource(DatabaseType.POSTGRES.name()));
        List<FreightCompany> freightCompanies = freightCompanyDao.getAllFreightCompanies();
        return GenericUtils.toJson(freightCompanies);
    }

    private static void insert(String json) {
        MongoClient mongoClient = new MongoClient("GSI-547576", 27017);
        MongoDatabase database = mongoClient.getDatabase("test");
        MongoCollection<Document> table = database.getCollection("fc");
        Document document = Document.parse(json);
        table.insertOne(document);
    }

}

GenericUtils.java

public final class GenericUtils {

    private static final Logger LOG = Logger.getLogger(GenericUtils.class);

    private GenericUtils() {
    }

    public static String toJson(List<FreightCompany> freightCompanies) throws IOException {
        String json = new ObjectMapper().writer().writeValueAsString(freightCompanies);
        LOG.debug("json = " + json);
        return json;
    }

}

pom.xml

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongo-java-driver</artifactId>
    <version>3.1.0</version>
    <type>jar</type>
</dependency>
<dependency>
   <groupId>org.codehaus.jackson</groupId>
   <artifactId>jackson-mapper-asl</artifactId>
   <version>1.9.13</version>
</dependency>

共有1个答案

拓拔麒
2023-03-14

您应该或者逐个插入,或者创建一个文档列表并使用insertMany()

这里有一个例子:

MongoClient mongoClient = new MongoClient("GSI-547576", 27017);
MongoDatabase database = mongoClient.getDatabase("test");
MongoCollection < Document > table = database.getCollection("fc");
FreightCompanyDao freightCompanyDao = new FreightCompanyDaoImpl(DataSourceFactory.getDataSource(DatabaseType.POSTGRES.name()));
List < FreightCompany > freightCompanies = freightCompanyDao.getAllFreightCompanies();

for (FreightCompany company: freighetCompanies) {
    Document doc = Document.parse(GenericUtils.toJson(company))
    collection.insertOne(doc)
}
 类似资料:
  • 我正在将CSV文件插入MongoDB。首先,我将CSV转换为Json格式的数组(参考:https://dzone.com/articles/how-to-convert-csv-to-json-in-java)然后尝试将其上载到MongoDB,但遇到以下错误(只有当CurrentBSONType为DOCUMENT时,才能调用readStartDocument,而当CurrentBSONType为A

  • 问题内容: 我正在尝试将文档插入Node.js中的MongoDB中。我已经从数据库中成功读取了文件,并通过命令行界面添加了文档。但是,我无法从JavaScript插入文档。如果这样做,我会收到一个错误: 错误:没有提供的回调无法使用writeConcern 这是我的代码: 我无法终生弄清楚为什么会出现此错误。 我做错了什么,我应该怎么做呢? 问题答案: 您需要为调用提供回调函数,以便该方法可以将插

  • 主要内容:insert() 与 save() 方法,insertOne() 方法,insertMany() 方法前面我们已经介绍了如何在 MongoDB 中 创建数据库和 创建集合,接下来我们再来介绍一下如何在集合中插入文档。文档是 MongoDB 中数据的基本单位,由 BSON 格式(一种计算机数据交换格式,类似于 JSON)的键/值对组成。 insert() 与 save() 方法 您可以使用 MongoDB 中的 insert() 或 save() 方法向集合中插入文档,语法如下: db.

  • 我正在使用LogStash1.5.2 尝试使用logstash-output-mongoDB在MongoDB中插入数据 它只有在解析的日志不包含数组时才会正常工作,当JSON包含数组时会生成异常。 无法将事件发送到MongoDB 未定义的MethodBSON_TYPE NOMethodError:未定义#NOMethodError的方法`error_code':0x39794292 有什么办法可以

  • 我需要后端的帮助。我正在使用邮递员,这是我后端的模型: 我试图在代理数组中推送文档,但我遇到了一些错误。 路线和控制器如下: 这就是我得到的错误:(节点:9916)未经处理的PromisejectionWarning:CastError:CastToObjectId值“{departmentId:'60e27549c36af1272812c4e3'}”(类型对象)在模型“Department”的路

  • 我试图导入一个对象到蒙戈。但是当我试图使用对象的值作为_id它失败了。错误,即:[CastError: Cast to ObjectID在路径_id]的值为11563195失败,以及稍后的[错误:文档在保存之前必须有_id] 我做错了什么? 以下是使用的模式: 非常感谢您的时间和帮助。