【问题标题】:JSON Insert in Mongo在 Mongo 中插入 JSON
【发布时间】:2019-10-07 22:30:44
【问题描述】:

我有一个使用 Gson 库创建的 JSON 对象。我想使用 Java Mongo Driver v3.8.1 将这个对象插入到 MongoDB 中,UUID 作为 Id,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。

【问题讨论】:

  • 您使用的是哪个 mongoDB 集成。在 mongoose 中,您可以直接将 JSON 作为新文档插入。
  • @SimonThiel 我正在使用 Java MongoDriver,mongodb-driver 3.8.1
  • 好的,很抱歉我帮不了你
  • 我强烈推荐使用Spring's mongo client

标签: java json mongodb mongodb-query


【解决方案1】:

我认为你不应该创建一个 JsonObject 并在之后解析它:

你可以试试这个吗:

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

【讨论】:

    【解决方案2】:

    我为此使用 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);
        }
    
    
    }
    
    

    【讨论】:

      【解决方案3】:

      使用 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/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-23
        • 2016-03-19
        • 1970-01-01
        • 2017-03-15
        • 2016-05-15
        • 1970-01-01
        • 2013-07-15
        • 2019-03-18
        相关资源
        最近更新 更多