将mongo查询转换为Spring-data-mongo查询 [英] translate mongo query to spring-data-mongo query

查看:43
本文介绍了将mongo查询转换为Spring-data-mongo查询的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个用mongoPlayround编写的查询here.

db.Workflow.aggregate([
  {
    $match: {}
  },
  {
    $unwind: "$tasks"
  },
  {
    "$addFields": {
      "workflow": "$$ROOT"
    }
  },
  {
    "$project": {
      workflowTask: "$tasks",
      workflow: "$workflow"
    }
  },
  {
    $set: {
      "workflowTask.workflow": "$workflow"
    }
  },
  {
    $unset: [
      "workflowTask.workflow.tasks",
      "workflow",
      "_id"
    ]
  },
  {
    $facet: {
      data: [
        {
          $skip: 0
        },
        {
          $limit: 30
        },
        
      ],
      count: [
        {
          $group: {
            _id: null,
            total: {
              $sum: 1
            }
          }
        },
        
      ],
      
    }
  }
])

我很难将其转换为Spring-data-mongo聚合对象!

更准确地说:

  • 匹配正常
  • 松开即可
  • 项目正常

似乎$$ROOT变量在Spring-data中不起作用! 另外,$set和$unset似乎不受支持? 最后,对于面,我可以生成Data[]部分,但无法生成计数:{Total:xx}

推荐答案

您使用的是哪个版本的Spring data MongoDB?在2.5.0版中,每个操作的工作方式如下。

MatchOperation matchOperation = Aggregation.match(new Criteria());
UnwindOperation unwindOperation = Aggregation.unwind("tasks");
AddFieldsOperation addFieldsOperation = Aggregation.addFields().addField("workflow").withValue("$$ROOT").build();
ProjectionOperation projectionOperation = Aggregation.project("_id").and("tasks").as("workflowTask").and("workflow").as("workflow");
SetOperation setOperation = SetOperation.builder().set("workflowTask.workflow").toValueOf("workflow");
UnsetOperation unsetOperation = UnsetOperation.unset("workflowTask.workflow.tasks", "workflow", "_id");
FacetOperation facetOperation = Aggregation.facet()
        .and(Aggregation.skip(0L), Aggregation.limit(30))
        .as("data")
        .and(Aggregation.group().count().as("total"))
        .as("count");

Set和UnSet在聚合类中不可用,但可以直接使用。

这篇关于将mongo查询转换为Spring-data-mongo查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆