mongodb - 将 mongo 聚合查询转换为 kotlin
问题描述
我有以下 mongodb 查询,需要将其转换为 kotlin spring 数据。任何人都可以帮助我:
db.getCollection('activities').aggregate([{
$project: {
day: 1,
rateQuotes: { $cond: { if: { $isArray: "$rateQuotes" }, then: { $size: "$rateQuotes" }, else: 0 } }
}
}])
当“rateQuotes”是一个数组时,以下代码将起作用:
val aggregation = newAggregation(
project("day")
.and("rateQuotes").size().`as`("rateQuotes")
)
需要添加条件来处理空值,我认为应该是:
val cond = ConditionalOperators.Cond.***
val aggregation = newAggregation(
project("day")
.and("rateQuotes").applyCondition(cond).size().`as`("rateQuotes")
)
但是我很难创造条件和应用条件。不确定尺寸是否应包含在条件中。如果哪位有这方面的经验,请告诉我,谢谢!
解决方案
我想通了,想在这里分享答案,以防以后有人想做同样的事情:
val rateQuoteConDoc = org.bson.Document("\$isArray", "\$rateQuotes")
val rateQuotesCondition = ConditionalOperators.Cond.`when`{ rateQuoteConDoc }
.thenValueOf { org.bson.Document("\$size", "\$rateQuotes") }
.otherwise(0)
val allShipmentsConDoc = org.bson.Document("\$isArray", "\$allShipments.shipments")
val allShipmentsCondition = ConditionalOperators.Cond.`when`{ allShipmentsConDoc }
.thenValueOf { org.bson.Document("\$size", "\$allShipments.shipments")}
.otherwise(0)
val match = match(Criteria.where(dayField).gte(startDate).and("type").`is`(type))
val aggregation = newAggregation(
match,
project("day")
.and(rateQuotesCondition).`as`("rateQuotes")
.and(allShipmentsCondition).`as`("allShipments")
)
谢谢!
推荐阅读
- javascript - 如何在 created() 挂钩期间使用数据初始化 Vue-CLI 应用程序?
- eclipse - 在 Eclipse 2019-09 上安装 Subversion
- flutter - 从 Flutter 中的列表中删除 Unicode 字符
- javascript - 在 es6 中解构对象的键、值和索引
- mysql - 如何为一个主键 SQL 插入两行?
- swift - 如果位置未获批准 - 迅速
- angular - 如何将图像 base64 url 传递给兄弟组件
- java - CameraX:如何使用图像调用分析方法
- java - 如何从 Java 中的 json 请求中获取特定值
- javascript - ReactJS - 使用 iframe 静默更新令牌