如何使用MongoRepository接口从Spring Mongo中的数组获取指定的对象字段

时间:2018-12-06 08:01:15

标签: java spring-boot spring-data-mongodb

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”)值的查询来从数组中获取唯一需要的对象

1 个答案:

答案 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