有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

  1. # 1 楼答案

    问题转化为疑问。用这个代码替换就行了

    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);
    }
    

    这对我有用。很高兴与mongodb医生合作官方文件 Projection Operator