Json对象
{
"_id" : ObjectId("5c07afde9bc2e9ab1dfb6c01"),
"rates" : [
{
"day" : "Mon",
"start" : "0900",
"end" : "1800",
"found " : "active"
},
{
"day" : "Tue",
"start" : "1800",
"end" : "0900",
"found " : "inactive"
},
{
"day" : "Fri",
"start" : "1800",
"end" : "0900",
"found " : "inactive"
}
]
}
我使用下面的链接从数组中获取对象之一:
get the specified fields from array
当我查询
myRepositroy.findByDayAndTime("Fri"));
public MyStatus findByDayAndTime(String day) {
// i get required object
Query query = new Query();
query.addCriteria(Criteria.where("rates.day").is(day));
query.fields().include("rates.$");
return mongoTemplate.find(query, MyStatus.class);
}
调用存储库从具有多个字段的数组中查找所需的对象
myRepositroy.findByDayAndTime("Fri","1800"));
以下是用于查询多个字段(如
)的方法public MyStatus findByDayAndTime(String day,String start) {
Query query = new Query();
query.addCriteria(Criteria.where("rates.day").is(day).and("rates.start").is(start));
query.fields().include("rates.$");
return mongoTemplate.find(query, MyStatus.class);
}
但是我得到的是输出的第二索引数组对象,而不是第三索引数组对象。
如何通过使用具有(“ Fri”,“ 1800”)值的查询来从数组中获取唯一需要的对象
答案 0 :(得分:0)
问题查询。只需替换这段代码
public MyStatus findByDayAndTime(String day,String start) {
Query query = new Query();
query.addCriteria(Criteria.where("rates").elemMatch(Criteria.where("day").is(day).and("start").is(start)));
query.fields().include("rates.$");
return mongoTemplate.find(query, MyStatus.class);
}
它为我工作。很高兴与doc mongodb官方文档一起使用 Projection Operator