2016-02-05 66 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

相关问题