使用Spring Data将DBObject插入MongoDB

Ody*_*see 8 mongodb dbobject spring-data-mongodb

我尝试使用Spring Data将以下DBObject插入MongoDB:

    BasicDBObject document = new BasicDBObject();
    document.put("country", "us");
    document.put("city", "NY");
    mongoTemplate.insert(document);
Run Code Online (Sandbox Code Playgroud)

其中mongoTemplate是我的Spring模板(org.springframework.data.mongodb.core.MongoTemplate).

执行时,我得到:

Caused by: org.springframework.dao.InvalidDataAccessApiUsageException: No Persitent Entity information found for the class com.mongodb.BasicDBObject
at org.springframework.data.mongodb.core.MongoTemplate.determineCollectionName(MongoTemplate.java:1747)
at org.springframework.data.mongodb.core.MongoTemplate.determineEntityCollectionName(MongoTemplate.java:1732)
at org.springframework.data.mongodb.core.MongoTemplate.insert(MongoTemplate.java:658)
Run Code Online (Sandbox Code Playgroud)

我的JSON最终将是动态的.那么任何想法如何动态提供这些实体信息?或者是否有另一种方法可以通过Spring Data将原始JSON插入Mongodb?

Cli*_*sch 10

您使用java驱动程序将spring-data与正常的mongo持久性混淆.

如果你想使用java驱动程序直接将数据持久化到mongoDB,那么你将使用你所展示的BasicDBObject,除了你不会使用mongoTemaplate类来持久化而是使用MongoClient类.所以它看起来像这样:

MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
DB db = mongoClient.getDB( "mydb" );
BasicDBObject o = new BasicDBObject();
o.set......
coll.insert(o);
Run Code Online (Sandbox Code Playgroud)

但是如果你试图使用spring-data来保存文档,那么你需要创建一个java类来表示你的文档(例如:Person)并使用@Document(collection ="person")注释这个类,然后使用mongoTemplate (这是一个特定于spring-data的类来保存这个实体.这与使用JPA/hibernate非常相似.

所以它看起来像这样

@Document(collection="person")
public class Person {
    private String fisrtName;
    ....

    Relevant getters and setters

}
Run Code Online (Sandbox Code Playgroud)

然后坚持不懈

Person p = new Person();
p.setFirstName("foo");
p.setLastName("bar");
....
mongoTemplate.save(p);
Run Code Online (Sandbox Code Playgroud)