Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongo db java驱动程序查询转换_Java_Mongodb_Aggregation Framework_Mongodb Java_Mongodb Java 3.3.0 - Fatal编程技术网

Mongo db java驱动程序查询转换

Mongo db java驱动程序查询转换,java,mongodb,aggregation-framework,mongodb-java,mongodb-java-3.3.0,Java,Mongodb,Aggregation Framework,Mongodb Java,Mongodb Java 3.3.0,我有以下数据结构 [{ "id": "1c7bbebd-bc3d-4352-9ac0-98c01d13189d", "version": 0, "groups": [ { "internalName": "Admin group", "fields": [ { "internalName": "Is verified",

我有以下数据结构

[{
    "id": "1c7bbebd-bc3d-4352-9ac0-98c01d13189d",
    "version": 0,
    "groups": [
        {
            "internalName": "Admin group",
            "fields": [
                {
                    "internalName": "Is verified",
                    "uiProperties": {
                        "isShow": true
                    }
                },
                {
                    "internalName": "Hide",
                    "uiProperties": {
                        "isHide": false
                    }
                },
                ...
            ]
        },
        ...
    ]     
},
{
    "id": "2b7bbebd-bc3d-4352-9ac0-98c01d13189d",
    "version": 0,
    "groups": [
        {
            "internalName": "User group",
            "fields": [
                {
                    "internalName": "Is verified",
                    "uiProperties": {
                        "isShow": true
                    }
                },
                {
                    "internalName": "Blocked",
                    "uiProperties": {
                        "isBlocked": true
                    }
                },
                ...
            ]
        },
        ...
    ]     
},
...
]
字段的内部名称可以重复。我想按group.field.internalName分组并剪切数组(用于分页),然后获得如下输出:

{
"totalCount": 3,
"items": [
    {
         "internalName": "Blocked"
    },
    {
         "internalName": "Hide"
    },
    {
         "internalName": "Is verified"
    }
]}
我写了一个有效的查询

db.layouts.aggregate(
{ 
    $unwind : "$groups" 
},
{ 
    $unwind : "$groups.fields" 
},
{
    $group: {
        "_id" : {
            "internalName" : "$groups.fields.internalName",
        },
        "internalName" : {
            $first : "$groups.fields.internalName"
        }
    }
},
{
    $group: {
        "_id" : null,
        "items" : {
            $push : "$$ROOT"
        },
        "totalCount" : {
            $sum : 1
        }
    }
},
{
    $project: {
        "items" : {
            $slice : [ "$items", 0, 20 ]
        },
        "totalCount": 1
    }
})
但是我有一个问题,就是如何将它转换成JavaAPI。请注意,我需要使用mongoTemplate方法。这是我所拥有的,也是我震惊的地方

    final List<AggregationOperation> aggregationOperations = new ArrayList<>();
    aggregationOperations.add(unwind("groups"));
    aggregationOperations.add(unwind("groups.fields"));

    aggregationOperations.add(
            group("groups.fields.internalName")
                .first("groups.fields.internalName").as("internalName")
    );

    aggregationOperations.add(
            group()
                 .push("$$ROOT").as("fields")
                 .sum("1").as("totalCount") // ERROR only string ref can be placed, but i need a number?
    );

    aggregationOperations.add(
            project()
                  .andInclude("totalCount")
                  .and("fields").slice(size, page * size)
    );
    final Aggregation aggregation = newAggregation(aggregationOperations);
    mongoTemplate.aggregate(aggregation, LAYOUTS, FieldLites.class).getMappedResults()
final List aggregationOperations=new ArrayList();
aggregationOperations.add(展开(“组”);
aggregationOperations.add(展开(“groups.fields”);
aggregationOperations.add(
组(“组.字段.内部名称”)
.first(“groups.fields.internalName”).as(“internalName”)
);
aggregationOperations.add(
组()
.push(“$$ROOT”).as(“字段”)
.sum(“1”).as(“totalCount”)//只能放置字符串ref,但我需要一个数字吗?
);
aggregationOperations.add(
项目()
.和包括(“总数”)
.和(“字段”).切片(大小、页面*大小)
);
最终聚合=新聚合(聚合操作);
聚合(聚合、布局、FieldLites.class).getMappedResults()
在这个查询中,sum()有问题,因为我只能按api放置一个字符串ref(但需要一个数字),而在项目操作中,我得到了一个异常 java.lang.IllegalArgumentException:引用“totalCount”无效!]根本原因


你能帮我翻译这个查询吗?

你可以使用
count

group()
    .push("$$ROOT").as("fields")
    .count().as("totalCount")

您可以使用
count

group()
    .push("$$ROOT").as("fields")
    .count().as("totalCount")