Spring数据mongo db计算具有特定条件的嵌套对象

时间:2017-08-23 11:02:36

标签: spring mongodb

我有一个这样的文件:

'subject' : {
'name' :"...."
'facebookPosts':[

 {
 date:"14/02/2017 20:20:03" , // it is a string
 text:"facebook post text here",
 other stuff here  

 }


]


}

我希望在一个特定的对象中计算facebookPosts,他们的日期字段包含例如" 23/07 / 2016"。

现在,我通过提取所有文档并在客户端计算(春天)来做到这一点,但我认为这样做效率不高。 请问您有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您需要汇总结果。

final Aggregation aggregation = Aggregation.newAggregation(
                    Aggregation.match(Criteria.where("facebookPosts.date").regex(REGEX)),
                    Aggregation.unwind("facebookPosts"),
                    Aggregation.group().count().as("count"));

正则表达式可能不是最好的解决方案,只是一个例子。

unwind会将数组拆分为可以计算的单独元素。

创建一个包含计数的类,如:

public class PostCount {
    private Long count;
    // getters, setters
}

然后像这样执行:

AggregationResults<PostCount> postCount = mongoTemplate.aggregate(aggregation, Subject.class, PostCount.class);
long count = postCount.getMappedResults().get(0).getCount();