Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带有Spring数据的MongoDB按id查找数组中的对象_Java_Mongodb_Spring Data_Spring Data Mongodb - Fatal编程技术网

Java 带有Spring数据的MongoDB按id查找数组中的对象

Java 带有Spring数据的MongoDB按id查找数组中的对象,java,mongodb,spring-data,spring-data-mongodb,Java,Mongodb,Spring Data,Spring Data Mongodb,我将Spring数据与Mongo DB嵌入式数据库一起使用,并具有以下文档结构: { id : 111 messaage : abcd commentsList: [ { id : 123 text: test text numberOfLikes : 5 numberOfDislikes:

我将Spring数据与Mongo DB嵌入式数据库一起使用,并具有以下文档结构:

{
  id : 111
  messaage : abcd
  commentsList: [
                  {
                    id : 123
                    text: test text
                    numberOfLikes : 5
                    numberOfDislikes: 2
                  }
                ]     
}
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);
我试图按id获取注释并按1更新numberOfLikes字段,但似乎无法使其正常工作,以下是我尝试的内容和java类结构:

{
  id : 111
  messaage : abcd
  commentsList: [
                  {
                    id : 123
                    text: test text
                    numberOfLikes : 5
                    numberOfDislikes: 2
                  }
                ]     
}
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);
公共类职位{
私有字符串id;
私有字符串消息;
private List commentsList=new ArrayList();
...
}
公开课评论{
私有字符串id;
私有字符串文本;
个人爱好;
私人不喜欢;
...
}
查询=新查询();
query.addCriteria(Criteria.where(“commentsList.\u id”)为(“123”);
List commentList=mongoTemplate.find(查询,MongoComment.class);

当前返回的列表始终为空。

数组“commentsList”中元素的id为“id”(不带“25;”)

这应该行得通

您试图查询的“\u id”是Mongodb为每个文档自动生成的标识符。数据库中的文档如下所示:

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

数组“commentsList”中元素的id为“id”(不带“25;”)

这应该行得通

您试图查询的“\u id”是Mongodb为每个文档自动生成的标识符。数据库中的文档如下所示:

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

由于您试图通过
id
获取注释,并通过一个更新
numberOfLikes
字段,因此您基本上希望复制此mongo shell更新操作:

db.post.update(
    { "commentsList.id": "123" },
    {
        "$inc": { "commentsList.$.numberOfLikes": 1 }
    }
)
等效的Spring数据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
);

由于您试图通过
id
获取注释,并通过一个更新
numberOfLikes
字段,因此您基本上希望复制此mongo shell更新操作:

db.post.update(
    { "commentsList.id": "123" },
    {
        "$inc": { "commentsList.$.numberOfLikes": 1 }
    }
)
等效的Spring数据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
);

感谢您的回复,它正在工作。注释id中也有null,因为我依赖于Spring数据自动生成id,但对于嵌套对象它似乎不这样做。感谢您的响应,它正在工作。注释id中也有null,因为我依赖于Spring数据自动生成id,但对于嵌套对象它似乎不这样做。感谢您的响应,它正在工作。注释id中也有null,因为我依赖于Spring数据自动生成id,但对于嵌套对象它似乎不这样做。感谢您的响应,它正在工作。我的注释id中也有null,因为我依赖于Spring数据自动生成id,但它似乎对嵌套对象不起作用。下面两个答案都是正确的,非常感谢帮助。下面两个答案都是正确的,非常感谢帮助。