8

我尝试使用 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 中?

4

3 回答 3

13

您正在使用 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-data 特定类。这与使用 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);
于 2013-12-06T10:43:15.330 回答
4

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

DBObject company = new BasicDBObject();
...
DBCollection collection = mongoTemplate.getCollection("company");
collection.insert(company);
于 2014-06-06T15:44:19.117 回答
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);
}
于 2018-04-05T14:57:09.683 回答