我有一个mongo文档,看起来像下面的JSON对象。我尝试使用mongoDb Query builder返回用户1读过的所有书籍:错误。
例如:
var query = new Query();
query.addCriteria(Criteria.where("id").is(1));
query.fields().elemMatch("books", Criteria.where("read").is(false));
返回用户1和第一本未读的书,但我想得到未读框的完整列表。
Users:[
{
id: 1,
name: 'John Doe',
books: [
{
id: 1,
title: 'The Hobbit',
read: false
},
{
id: 2,
title: 'The Lord of the Rings',
read: false
},
{
id: 3,
title: 'The Silmarillion',
read: false
}
]
},
{
id: 2,
name: 'Jane Doe',
books: []
}
}
2条答案
按热度按时间x4shl7ld1#
您可以在聚合管道中将filter与项目阶段一起使用。
Mongo Playground
查询将转换到管道的此项目阶段。
wmvff8tz2#
这是一个使用MongoRepository〈Users,Long〉接口和@Aggregation管道的解决方案。比查询生成器IMO更干净,并支持搜索和分页。
BookList类别