我有一个使用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。
答案 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/