如何更新数组中与spring数据中的条件匹配的嵌套对象 - mongodb?

时间:2013-04-17 17:28:59

标签: mongodb spring-data-mongodb

我在mongodb中有一个文档,它是从这个java模型创建的:

class Comment 
{ 
    String pollID; 
    List<CommentDetail> commentDetailList;
}

class CommentDetailList
{
    String text;
    User user;
}

class User
{
    String userID;
    String username;
}

所以,我的文档看起来像这样:

{
  "pollID":"ABCDEFG",
  "commentDetailList":
   [
     {
        "text":"Hello Comment1",
        "user":
        {
           "userID":"001",
           "username": "username1"
        }
     },
     {
        "text":"Hello Comment2",
        "user":
        {
           "userID":"001",
           "username": "username1"
        }
     },
     {
        "text":"Hello Comment3",
        "user":
        {
           "userID":"002",
           "username": "username2"
        }
     }
  ]
}

现在我想使用以下代码更新userID = 001的用户的用户名:

Query query = new Query(Criteria.where("pollID").is("ABCDEFG")
            .and("commentDetailList")
            .elemMatch(Criteria.where("user.userID").is("001")));

Update update = new Update().set("commentDetailList.$.user.username", username);

WriteResult wr = mongoTemplate.updateMulti(query, update, "comment");

问题是它只更新第一条评论(评论文字=&#34; Hello Comment1&#34;)。

有人可以帮助我吗?

我是否对更新功能有误解?

THX。

PS。对不起我的英文:D

1 个答案:

答案 0 :(得分:6)

尝试此查询:

Query query = new Query(new Criteria().andOperator(
  Criteria.where("pollID").is("ABCDEFG"),
  Criteria.where("commentDetailList").elemMatch(Criteria.where("user.userID").is("001"))
));