Mongodb Spring Mongo Db中文档的按数组分组
如何在Spring和MongoDb中按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
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方法的输入类派生