如何在Spring Data MongoOperation中使用MongoDB$let
MongoDB以单个元素数组的形式返回如何在Spring Data MongoOperation中使用MongoDB$let,spring,mongodb,spring-boot,spring-data,spring-data-mongodb,Spring,Mongodb,Spring Boot,Spring Data,Spring Data Mongodb,MongoDB以单个元素数组的形式返回$count。我想把它转换成一个对象(int或String),这样我就可以把它直接映射到类中的String字段。为此,我使用了下面的投影,将其转换为int32对象。现在,我想将下面的投影转换为Spring数据MongoOperationaggregate { $project:{ "count": { $let:{ "vars":{ "elem": { $array
$count
。我想把它转换成一个对象(int或String),这样我就可以把它直接映射到类中的String
字段。为此,我使用了下面的投影,将其转换为int32
对象。现在,我想将下面的投影转换为Spring数据MongoOperation
aggregate
{
$project:{
"count":
{
$let:{
"vars":{
"elem":
{ $arrayElemAt:["$count",0] }
},
"in":{
"count" :"$$elem.totalVideos"
}
}
}
}
}
阅读文档,我构建了它的一部分,如下所示
Let.define(Let.ExpressionVariable.newVariable("elem").
forExpression(ArrayOperators.ArrayElemAt.arrayOf("count").elementAt(0)))
但不确定我是否做对了。有人知道如何在Spring数据中实现这一点吗
提前感谢
我们应用计数“$$elem.totalVideos”
而不是计数“$$elem.totalVideos”{“$toInt”:“$$elem.totalVideos”}
您可以使用
.ToString
,.ToLong
等
Aggregation.project()
.and(
Let.define(Let.ExpressionVariable
.newVariable("elem")
.forExpression(
ArrayOperators.ArrayElemAt.arrayOf("count").elementAt(0)
)
).andApply(PropertyExpression.property("count").definedAs(ToInt.toInt("$$elem.totalVideos")))
//.andApply(ToInt.toInt("$$elem.totalVideos"))
).as("count")
不太漂亮的实现
Aggregation.project()
.and(
Let.define(Let.ExpressionVariable
.newVariable("elem")
.forExpression(
ArrayOperators.ArrayElemAt.arrayOf("count").elementAt(0)
)
).andApply(new AggregationExpression() {
@Override
public Document toDocument(AggregationOperationContext context) {
return new Document("count", "$$elem.totalVideos");
}
})
).as("count")