如何为聚合查询创建Spring Boot存储库查询?

问题描述 投票:0回答:1

我想使用mongo db创建spring boot存储库查询。我的集合名称为qualification

{
    "code": "DEVELOPER",
    "description": "Software Developer",
    "status": "ACTIVE",
    "listItems": [
        {
            "itemId": "JAVA",
            "item": "Java"
        },
        {
            "itemId": "PYTHON",
            "item": "Python"
        },
        {
            "itemId": "PHP",
            "item": "Php"
        },
        {
            "itemId": "JAVASCRIPT",
            "item": "Javascript"
        }
    ],
    "returncode": "00000",
    "message": "Data Available"
}

我尝试了以下查询来获取与该模式匹配的任何内容ja

db.employee.aggregate([{$match:{"code" : "DEVELOPER"}},
{$project : {listItems:{$filter:{
    input: "$listItems",
               as: "listItems",
               cond: { $regexMatch:{
                        input:"$$listItems.item",
                        regex: /ja/i}  }
}}}}])

我得到的确切答案是,

{
    "code": "DEVELOPER",
    "description": "Software Developer",
    "status": "ACTIVE",
    "listItems": [
        {
            "itemId": "JAVA",
            "item": "Java"
        },
        {
            "itemId": "JAVASCRIPT",
            "item": "Javascript"
        }
    ],
    "returncode": "00000",
    "message": "Data Available"
}

但是当我使用mongotemplate在Java中尝试并得到NULL指针异常并且没有任何输出的时候

public List<ListValue> findAllByCode(String code,String item) {
           Query query = new Query();
           query.addCriteria(Criteria.where("code").is(code).and("listItems.item").regex("^" + item + "$", "i"));

           return mongoTemplate.find(query, ListValue.class);
        }
java mongodb spring-boot criteria mongotemplate
1个回答
0
投票

regex("^" + item + "$", "i")表示完全匹配(不区分大小写)

.regex(".*" + item + ".*", "i")用于包含(不区分大小写)item模式

query.addCriteria(Criteria.where("code").is(code).and("listItems.item").regex(".*" + item + ".*", "i");

查找详细信息here

© www.soinside.com 2019 - 2024. All rights reserved.