Конвертировать запрос агрегации монго в котлин - PullRequest
0 голосов
/ 10 июля 2019

У меня есть запрос ниже mongodb, необходимо преобразовать его в данные весны kotlin.Может ли кто-нибудь помочь мне в этом:

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")
)

Но мне трудно создать условие и применить условие.Не уверен, что размер должен быть включен в условие.Если у кого-то есть опыт для этого, пожалуйста, дайте мне знать, спасибо!

1 Ответ

0 голосов
/ 11 июля 2019

Я понял, хотел бы поделиться ответом здесь, на случай, если кто-то захочет сделать то же самое позже:

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")
)

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...