我正在尝试使用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");
问题内容: 作为一个非C#精通的程序员,我对LINQ查询的评估语义感到好奇,如下所示: 假设这是一个定义了and字段的ADO实体,那么从数据库的角度来看,这将做什么?具体来说,是否将运行查询以生成内存中的结构,然后由查询查询该结构?还是仅从中提取有关查询的数据,然后产生一个新的数据库对等查询的结构?因此,如果我遍历这两个查询,将执行多少个SQL语句? 问题答案: 它们是可组合的。这是可能的,因为L
我对GraphQL的分析解决方案非常感兴趣(想想一个显示图形的webapp)。但我找不到任何使用聚合函数的GraphQL示例。这是我的前端完成的大多数查询的一个主要方面。 对于我的解决方案,我们有3个典型的后端调用。 搜索 假设我们在GraphQL中指定了这种类型 搜寻 GraphQL似乎很好地处理了这一点。毫无疑问。 ex.搜索Bob的年龄{Person(name:"Bob"){age}} 这是
问题内容: 我们有几个数据模式,我们研究了向Liquibase的迁移。(其中一种数据模式已经迁移到Liquibase)。 对我们来说重要的问题是Liquibase是否支持空运行: 我们需要在所有架构上运行数据库更改而无需提交,以确保我们没有问题。 如果成功,则所有数据库更改都将再次通过提交运行。 答案后添加 我阅读了有关updateSQL的文档,但它不能满足“快速运行”的要求。它只是生成SQL(在
问题内容: 如果我有参数,那么我的程序只需使用函数中的一个即可。有没有一种方法可以组合起来,以便程序仅接受或? 编辑: 添加一个简单的程序以更清楚: 然后只能被调用。是否可以将argparse组排除在组之外,以便仅被调用? 问题答案: 编辑 :没关系。因为调用时必须创建一个选项,这是一个可怕的选择。那不是我的设计选择。如果您迫切需要此功能,可以尝试使用ConflictsOptionParser来实
问题内容: 我正在尝试使用Diamond运算符,但是却收到以下消息: -source 1.5中不支持Diamond运算符(使用-source 7或更高版本来启用Diamond运算符) 它可以在Android的netbeans中修复吗? 问题答案: Android需要Java来源合规性5.0或6.0(Java5 / 6)。开箱即用不支持Java7。这些文章描述了有关如何使用某些Java7功能的技巧:
我知道变戏法对左旋转有效。右旋转是否适合杂耍算法?如果是这样,那么需要修改什么才能使其正确旋转? 使用杂耍算法的左旋转 参考以下链接上的第三种方法 空leftRotate(int arr[], int d, int n){int i, j, k, temp; for(i=0; i 请帮助我它是否支持