MongoDB 和 Spring 数据按 id 在数组中查找对象
MongoDB with Spring Data find object in array by id
我正在使用带有 Mongo DB 嵌入式数据库的 Spring 数据,并且具有以下文档结构:
{
id : 111
messaage : abcd
commentsList: [
{
id : 123
text: test text
numberOfLikes : 5
numberOfDislikes: 2
}
]
}
我正在尝试通过 id 获取评论并将 numberOfLikes 字段更新为 1,但似乎无法正常工作,这是我尝试过的 java class结构:
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);
目前返回的列表始终为空。
数组 "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
}
]
}
由于您试图通过 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
);
我正在使用带有 Mongo DB 嵌入式数据库的 Spring 数据,并且具有以下文档结构:
{
id : 111
messaage : abcd
commentsList: [
{
id : 123
text: test text
numberOfLikes : 5
numberOfDislikes: 2
}
]
}
我正在尝试通过 id 获取评论并将 numberOfLikes 字段更新为 1,但似乎无法正常工作,这是我尝试过的 java class结构:
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);
目前返回的列表始终为空。
数组 "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
}
]
}
由于您试图通过 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
);