Spring Data MongoDb是否支持$ filter数组聚合运算符?

我正在尝试使用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");

以上是 Spring Data MongoDb是否支持$ filter数组聚合运算符? 的全部内容, 来源链接: utcz.com/qa/411335.html

回到顶部