java - 如何将 Mongodb 聚合(展开、匹配和项目)查询转换为 java 代码

标签 java mongodb match aggregation unwind-segue

我想将此查询转换为具有聚合和条件的 java 代码,使用 $unwind 获取单个文档和 $project 以获得个性化响应。

db.getCollection('WarrantyCategory').aggregate([{
    $unwind: '$subWarrantyCategories'
},
{
    $match: {
        $and: [{
                $and: [{
                        'subWarrantyCategories.filtersAllowed.type._id': 'CODE_ACTE'},
                    {
                        $and: [{'subWarrantyCategories.filtersAllowed.valuesAutorized.id': 'ORT'}, 
                               {'subWarrantyCategories.filtersAllowed.valuesAutorized.operator': '='}]

                    }
                ]
            },
            {

                $and: [{'subWarrantyCategories.filtersAllowed.type._id': 'TYP_ACCORD'},

                    {
                        $and: [{'subWarrantyCategories.filtersAllowed.valuesAutorized.id': 'O'},{'subWarrantyCategories.filtersAllowed.valuesAutorized.operator': '='}]

                    }]
            }
        ]
    }
},
{
    $project: {

        _id: 0,

        label: 1,

        code: 1,

        labelSCat: '$subWarrantyCategories.label',

        CodeSCat: '$subWarrantyCategories._id'}}])

我尝试了一个使用 @Query 但没有 $unwind 的示例,效果非常好

最佳答案

Spring Data MongoDB的示例代码

List<AggregationOperation> stages = new ArrayList<>();

stages.add(unwind("$subWarrantyCategories"));

List<Criteria> andList = new ArrayList<>();

Criteria c1 = new Criteria("subWarrantyCategories.filtersAllowed.type._id").is("CODE_ACTE");
Criteria c2  new Criteria("subWarrantyCategories.filtersAllowed.valuesAutorized.id").is("ORT");
Criteria c3 =  new Criteria("subWarrantyCategories.filtersAllowed.valuesAutorized.operator").is("=");
Criteria c4  new Criteria("subWarrantyCategories.filtersAllowed.type._id").is("TYP_ACCORD");
Criteria c5 =  new Criteria("subWarrantyCategories.filtersAllowed.valuesAutorized.id").is("0");
Criteria c5 =  new Criteria("subWarrantyCategories.filtersAllowed.valuesAutorized.operator").is("=");


andList.add(new Criteria().andOperator(c1, new Criteria().andOperator(c2,c3)));
andList.add(new Criteria().andOperator(c4, new Criteria().andOperator(c5,c6)));

stages.add(match(new Criteria().andOperator(andList.toArray(new Criteria[andList.size()]))));

ProjectionOperation projection = project("_id", "label",  "code").and("$subWarrantyCategories.label").as("labelSCat").and("$subWarrantyCategories._id").as("CodeSCat");

stages.add(projection);

newAggregation(stages)

关于java - 如何将 Mongodb 聚合(展开、匹配和项目)查询转换为 java 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59458075/

相关文章:

java - 如何让 Weblogic 8.1 提供静态内容?

java - JUNK 和 Java 的鼠标事件

javascript - 如何检查mongodb数据库中存在的大学名称

haskell - 尝试在两个字符串中查找第一个不同字符时出现非详尽模式错误

java - 如何使整数具有可比性

java - 根据某些字段对对象进行分组

mongodb - 跨索引获取数组字段的不同聚合

node.js - 类型错误 : Cannot Read Property 'imageName' of undefined

elasticsearch - 部分和完整的短语匹配

string - 根据动态模式匹配符号流