Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.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
Mongodb Spring Mongo Db中文档的按数组分组_Mongodb_Aggregation Framework_Spring Data Mongodb_Database - Fatal编程技术网

Mongodb Spring Mongo Db中文档的按数组分组

Mongodb Spring Mongo Db中文档的按数组分组,mongodb,aggregation-framework,spring-data-mongodb,database,Mongodb,Aggregation Framework,Spring Data Mongodb,Database,如何在Spring和MongoDb中按tagValue进行分组? MongoDB查询: db.feed.aggregate([ { $group: { _id: "$feedTag.tagValue", number: { $sum : 1 } } }, { $sort: { _id : 1 } } ]) 我如何在SpringMongoDB中做同样的事情,可能是使用聚合方法? 提要集合的示例文档: { "_id" : O

如何在Spring和MongoDb中按
tagValu
e进行分组? MongoDB查询:

db.feed.aggregate([                 
    { $group: { _id: "$feedTag.tagValue", number: { $sum : 1 } } },
    { $sort: { _id : 1 } }        
])
我如何在SpringMongoDB中做同样的事情,可能是使用聚合方法? 提要集合的示例文档:

{
    "_id" : ObjectId("556846dd1df42d5d579362fd"),   
    "feedTag" : [ 
        {
            "tagName" : "sentiment",
            "tagValue" : "neutral",
            "modelName" : "sentiment"
        }
    ],    
    "createdDate" : "2015-05-28"
}

要按
tagValue
分组,因为这是一个数组字段,所以需要在分组之前应用管道步骤来拆分数组,以便获得实际计数:

db.feed.aggregate([  
    {
        "$unwind": "$feedTag"
    }
    { 
        "$group": { 
            "_id": "$feedTag.tagValue", 
            "number": { "$sum" : 1 } 
        } 
    },
    { "$sort": { "_id" : 1 } }        
])
以下是中的等效示例:

import static org.springframework.data.mongodb.core.aggregation.Aggregation.*;

Aggregation agg = newAggregation(    
    unwind("feedTag"),
    group("feedTag.tagValue").count().as("number"),    
    sort(ASC, "_id") 
);

// Convert the aggregation result into a List
AggregationResults<Feed> results = mongoTemplate.aggregate(agg, "feed", Feed.class);
List<Feed> feedCount = results.getMappedResults();
import static org.springframework.data.mongodb.core.aggregation.aggregation.*;
聚合agg=newAggregation(
展开(“feedTag”),
组(“feedTag.tagValue”).count().as(“number”),
排序(ASC,“\U id”)
);
//将聚合结果转换为列表
AggregationResults=mongoTemplate.aggregate(agg,“feed”,feed.class);
List feedCount=results.getMappedResults();
从上面可以看出,通过静态工厂方法创建了一个新的聚合对象,该方法将传递一个定义聚合管道的聚合操作列表

第一步使用展开操作为“feedTag”数组中的每个标记生成新文档

在第二步中,group操作为每个嵌入的
“feedTag.tagValue”
-值定义一个组,通过count aggregation操作符对其发生计数进行聚合

作为第三步,通过排序操作,按
按升序对feedTag的结果列表进行排序

最后,在MongoTemplate上调用aggregate方法,让MongoDB以创建的聚合作为参数执行实际的聚合操作

请注意,输入集合被显式指定为聚合方法的
“feed”
参数。如果未显式指定输入集合的名称,则它将从作为第一个参数传递给newAggreation方法的输入类派生