java – Spring Data MongoDb是否支持$filter数组聚合运算符?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – Spring Data MongoDb是否支持$filter数组聚合运算符?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1513字,纯文字阅读大概需要3分钟。
内容图文
我正在尝试使用MongoTemplate在Spring Data中实现以下工作mongoDb查询:
db.answers.aggregate([
{ "$match" : { "object_id" : "1" } },
{ "$project": { 'answer_list': 1, 'profile': { $filter : { input: '$answer_list', as: 'answer', cond: { $eq: [ '$$answer.question', 2 ] } } } } },
{ "$unwind" : "$profile"},
{ "$unwind" : "$answer_list"},
{ "$group" : { "_id" : { "question" : "$answer_list.question", "answer" : "$answer_list.answer", "criteria" : "$profile.answer"}, "count" : { "$sum" : 1 } } },
{ "$sort" : { "_id.question" : 1, "_id.answer" : 1 } }
]);
该集合具有以下结构:
{
"_id" : ObjectId("..."),
"object_id" : ObjectId("..."),
"answer_list" : [
{
"question" : NumberLong(0),
"answer" : NumberLong(0)
},
{
"question" : NumberLong(1),
"answer" : NumberLong(2)
},
{
"question" : NumberLong(2),
"answer" : NumberLong(2)
}
]}
我在这里要做的是关于简单调查提交数据的报告.问题是“对第一个问题回答0的用户如何回答第二个问题?”
我花了一整天时间搜索SpringData Mongo Db文档,但我什么也没找到.
有人可以帮忙吗?
TIA
解决方法:
您可以通过提供自己的AggregationExpression来解决此问题.
ProjectionOperation agg = Aggregation.project() //
.and(new AggregationExpression() {
@Override
public DBObject toDbObject(AggregationOperationContext context) {
DBObject filterExpression = new BasicDBObject();
filterExpression.put("input", "$answer_list");
filterExpression.put("as", "answer");
filterExpression.put("cond", new BasicDBObject("$eq2", Arrays.<Object> asList("$$answer.question", 2)));
return new BasicDBObject("$filter", filterExpression);
}
}).as("profile");
内容总结
以上是互联网集市为您收集整理的java – Spring Data MongoDb是否支持$filter数组聚合运算符?全部内容,希望文章能够帮你解决java – Spring Data MongoDb是否支持$filter数组聚合运算符?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。