errore durante l’inserimento di una serie di documenti JSON in MongoDB utilizzando Java

sto cercando di inserire una stringa json che contiene una serie di documenti, ma ottenere seguente eccezione.

versione server MongoDB: 3.0.6

versione del driver Mongo-Java: 3.1.0

capisco che insertOne() metodo viene utilizzato per inserire un solo documento, ma qui è una serie di documenti. non sono sicuro di come utilizzare insertMany() metodo qui.

si prega di guidare.

JSON Stringa che voglio inserire:

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}]

registro delle eccezioni:

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>

EN From: Error while inserting an array of JSON documents in to MongoDB using Java

More similar articles:

4 Comments

  1. si dovrebbe inserire uno ad uno o creare un elenco di documenti e utilizzare insertMany ()

    ecco un esempio:

    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)
    }
  2. non un utente grande di MongoDB ma accennare nei termini di RDBMS; ogni azienda di trasporto dovrebbe essere in una fila differente.

Leave a Reply

Your email address will not be published. Required fields are marked *