使用Spring Data将DBObject插入MongoDB

时间:2013-12-06 10:23:31

标签: mongodb spring-data-mongodb dbobject

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

    BasicDBObject document = new BasicDBObject();
    document.put("country", "us");
    document.put("city", "NY");
    mongoTemplate.insert(document);

其中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)

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

3 个答案:

答案 0 :(得分: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);

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

所以它看起来像这样

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

    Relevant getters and setters

}

然后是持久性

Person p = new Person();
p.setFirstName("foo");
p.setLastName("bar");
....
mongoTemplate.save(p);

答案 1 :(得分:2)

另一种方法是通过DBCollection直接访问MongoTemplate对象:

DBObject company = new BasicDBObject();
...
DBCollection collection = mongoTemplate.getCollection("company");
collection.insert(company);

答案 2 :(得分:1)

另一种方法

导入语句

import com.mongodb.client.MongoCollection;
import org.bson.Document;
import org.springframework.data.mongodb.core.MongoTemplate;

会员变量

  @Autowired MongoTemplate mongoTemplate;

  MongoCollection<Document> collection;
  @PostConstruct
  public void init(){
    collection = mongoTemplate.getCollection("company");
  }

然后,方法

public void insertRawData(){
    Document company = new Document(new HashMap()); // If you have to insert a hashMap 
// otherwise you can add one-by-one using company.put("foo","bar")
    collection.insertOne(company);
}