Вставьте 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);
}
Другие вопросы по тегам