在Mongo中插入JSON

时间:2019-05-21 13:49:43

标签: java json mongodb mongodb-query

我有一个使用Gson库创建的JSON对象。我想使用Java Mongo Driver v3.8.1将这个对象插入MongoDB中,并将UUID作为Ids和Integer的int64类型。但是,这似乎分别以String和Int32类型插入。

JsonObject folderObject = new JsonObject();
folderObject.addProperty("id", UUID.randomUUID().toString());
folderObject.addProperty("cid", document.getCid());

我正在将其转换为BSON

org.bson.Document doc= org.bson.Document.parse(folderObject .toString());

并使用

插入MongoDB
  mongoCollection.insertOne(doc);

我的document.getCid()的类型为Long,但仍作为int32插入,并且我无法将String以外的任何内容传递给folderObject。

3 个答案:

答案 0 :(得分:1)

我认为您不应该创建JsonObject并随后对其进行解析:

您可以简单地尝试一下吗?

    Document doc = new Document()
            .append("id", UUID.randomUUID())
            .append("cid", document.getCid());
    mongoCollection.insertOne(doc);

答案 1 :(得分:1)

我为此使用Spring。代码如下:

import com.mongodb.MongoClient;
import org.springframework.data.mongodb.core.MongoTemplate;


public class MyDao {

    private final MongoTemplate template;

    public MyDao(MongoClient client, String db) {
        this.template = new MongoTemplate(client, db);
    }

    public <T extends Serializable> void store(Collection<T> data, String collectionName) {
        template.insert(data, collectionName);
    }


}

答案 2 :(得分:0)

使用Mongo POJO编解码器解决了此问题。

CodecRegistry pojoCodecRegistry = fromRegistries(MongoClient.getDefaultCodecRegistry(),
                fromProviders(PojoCodecProvider.builder().automatic(true).build()));

    CodecRegistry codecRegistry =
                fromRegistries(CodecRegistries.fromCodecs(new UuidCodec(UuidRepresentation.STANDARD)),
                        MongoClientSettings.getDefaultCodecRegistry(),pojoCodecRegistry
                );

然后您可以选择使用给定的编解码器启动客户端,或者选择使用编解码器注册表启动数据库或使用编解码器启动集合。

参考-https://mongodb.github.io/mongo-java-driver/3.8/driver/getting-started/quick-start-pojo/