Вставьте DBObject в MongoDB, используя Spring Data
Я попытался вставить следующий DBObject в MongoDB, используя Spring Data:
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 будет динамичным в конце. Итак, есть идеи, как динамически предоставлять информацию об объектах? Или есть другой способ вставить сырой JSON в Mongodb через Spring Data?
3 ответа
Вы путаете данные пружины с обычным постоянством монго, используя драйвер Java.
Если вы хотите сохранить данные в mongoDB напрямую, используя драйвер java, вы должны использовать 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. (который является специфическим классом данных пружины для сохранения этой сущности. Это очень похоже на использование 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);
Другой способ сделать это - получить прямой доступ к DBCollection
объект через MongoTemplate
:
DBObject company = new BasicDBObject();
...
DBCollection collection = mongoTemplate.getCollection("company");
collection.insert(company);
Еще один способ сделать это
Импорт заявлений
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);
}