我有一个这样的文件:
'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"。
现在,我通过提取所有文档并在客户端计算(春天)来做到这一点,但我认为这样做效率不高。 请问您有什么想法吗?
答案 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();