2016-02-05 62 views
0

我使用Spring數據與蒙戈DB嵌入式數據庫,發現在數組對象有下列文件結構:MongoDB中使用Spring的數據由ID

{ 
    id : 111 
    messaage : abcd 
    commentsList: [ 
        { 
        id : 123 
        text: test text 
        numberOfLikes : 5 
        numberOfDislikes: 2 
        } 
       ]  
} 

我試圖獲得通過ID的評論和更新通過一個numberOfLikes領域,似乎無法得到它的工作,這裏是我試過和Java類結構:

public class Post { 

    private String id; 
    private String message; 
    private List<Comment> commentsList = new ArrayList<>(); 
    ... 
} 

public class Comment { 

    private String id; 
    private String text; 
    private int numberOfLikes; 
    private int numberOfDislikes; 

    ... 
} 

Query query = new Query(); 
query.addCriteria(Criteria.where("commentsList._id").is("123")); 
List<MongoComment> commentList = mongoTemplate.find(query, MongoComment.class); 

目前返回的列表始終爲空。

+0

都低於答案的幫助正確的,非常感謝。 – Andrei

回答

0

既然你正試圖獲得通過id評論,並通過一個更新numberOfLikes現場,你基本上是想複製這個蒙戈外殼更新操作:

db.post.update(
    { "commentsList.id": "123" }, 
    { 
     "$inc": { "commentsList.$.numberOfLikes": 1 } 
    } 
) 

等效春數據MongoDB的代碼如下:

import static org.springframework.data.mongodb.core.query.Criteria.where; 
import static org.springframework.data.mongodb.core.query.Query; 
import static org.springframework.data.mongodb.core.query.Update; 

... 

WriteResult wr = mongoTemplate.updateMulti(
    new Query(where("commentsList.id").is("123")), 
    new Update().inc("commentsList.$.numberOfLikes", 1), 
    MongoPost.class 
); 
+0

謝謝你的迴應,它正在工作。我在評論id中也有空,因爲我依靠Spring Data自動生成id,但它似乎並沒有爲嵌套對象執行此操作。 – Andrei

0

數組「commentsList」中元素的id是「id」(不帶'_')。

query.addCriteria(Criteria.where("commentsList.id").is("123")) 

這應該工作。

您試圖查詢的「_id」是Mongodb爲每個文檔自動生成的標識符。你的數據庫文件看起來是這樣的:

{ 
    _id: ObjectId("56b46e1d1d1353e38886dcc34f"), 
    id : 111, 
    messaage : "abcd", 
    commentsList: [ 
        { 
        id : 123, 
        text: "test text", 
        numberOfLikes : 5, 
        numberOfDislikes: 2 
        } 
       ]  
    } 
+1

謝謝你的迴應,它正在工作。我在評論id中也有空,因爲我依靠Spring Data自動生成id,但它似乎並沒有爲嵌套對象執行此操作。 – Andrei

相關問題