2017-03-25 11 views
0

最近、MongoDB + Spring Dataの作業を開始し、MongoDBとの単純な関係に固執しました。私は解決策を探すのに数時間を費やしましたが、それを得ることができませんでしたので、先に進み、SOに関する新しい質問をしてください。春データDBRef MongoDBアップデート

UserとBookの2つのエンティティがあります。ここでの関係は、多くの本を持つことができ、などのJavaで定義されている私は、ユーザーのコレクションのみ書籍IDと全体ではなく、文書を保存しなければならないような方法でCRUD操作を実行しています

public class User { 
@Id 
Private String id; 
Private String userName; 
@DBRef 
private List<Book> books; 
//getters + setter 
} 

public class Book { 
@Id 
private String id; 
private String bookName; 
//getters + setter 
} 

です。私はドキュメントを挿入するとき、それは正しく、ユーザーのrefrence objectIdとして本を格納しますが、私はそれを更新すると、ドキュメント全体をユーザーコレクションに格納します。 ここにコードがあります。

public void save { 
Person person = new Person(); 
Book book = new Book(); 
List<Book> bookList = new ArrayList<Book>(); 

book.setName("Book Name"); 
mongoOperation.save(book); 

bookList.add(book); 
person.setUserName("[email protected]"); 
person.setBook(bookList); 
mongoOperation.save(person); 
} 


private Person update(){ 
    Person person = new Person(); 
    Book book = new Book(); 
    List<Book> bookList = new ArrayList<Book>(); 

    book.setName("Book Name"); 
    book.setCreatedBy("Abc Carter"); 
    mongoOperation.save(book); 

    bookList.add(book); 
    person.setUserName("[email protected]"); 
    //person.setBook(bookList); 
    mongoOperation.save(person); 

    Query searchQuery = new Query(Criteria.where("userName").is("[email protected]")); 
    mongoOperation.updateFirst(searchQuery, Update.update("book", bookList), Person.class); 

    return person; 
} 

私はMongoDB Compassを使用してデータを表示しています。挿入時に、スクリーンショットを添付して

Person document during Insert Person document during Update

答えて

0

を更新あなたはPersonクラスにBook DBRefを追加するために、クエリの下に試すことができます。

Query searchQuery = new Query(Criteria.where("userName").is("[email protected]")); 
mongoOperation.updateFirst(searchQuery, new Update().push("book").value(book), Person.class); 
関連する問題