将mongo查询转换为Spring-data-mongo查询 [英] translate mongo query to spring-data-mongo query
本文介绍了将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屋!
查看全文