2017-08-23 60 views
1

我有一个这样的文件:春数据蒙戈DB计数嵌套对象有specifique条件

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

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

} 


] 


} 

,我想算facebookPosts内specifique objcts他们的日期字段包含如“23/07/2016" 。

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

回答

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(); 
+0

是的,我觉得这个做的工作,但如果我想要的只是来计算满足条件的facebookPosts,我的意思是我只想指望他们没有得到它们并且自己计算它们。 – BadrEddineBen

+0

mongoTemplate.count(查询,clazz) – aturkovic

+0

它会计算主题还是其中的facebookPost? – BadrEddineBen