4

我在 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"
        }
     }
  ]
}

现在我想使用以下代码更新用户 ID = 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");

问题是它只更新第一条评论(带有文本=“Hello Comment1”的评论)。

有人可以帮我吗?

我对更新功能有误解吗?

谢谢。

PS。对不起我的英语:D

4

1 回答 1

7

试试这个查询:

Query query = new Query(new Criteria().andOperator(
  Criteria.where("pollID").is("ABCDEFG"),
  Criteria.where("commentDetailList").elemMatch(Criteria.where("user.userID").is("001"))
));
于 2013-07-18T18:36:24.827 回答