首页 > 解决方案 > 将 MongoDB 查询转换为 Scala

问题描述

我正在尝试将以下 MongoDB 查询转换为等效的 Scala

db.getCollection("shop-items").aggregate([
    {
        $bucketAuto: {
              groupBy: "$prices.avg",
              buckets: 50,
              output: {
                "items" : {
                    $push: "$$ROOT"
                },
               "count": { $sum: 1 },
              }
          }
    },
    {$addFields: {"start": {$floor :{$multiply: [ { $rand: {} }, "$count"]}}}},
    {$project : { _id: 0, items: {$slice: ["$items", "$start", 20]}}},
    {$unwind: "$items"}
])

目前我有

collection.aggregate(
      List(
        bucketAuto("$prices.avg", 100, BucketAutoOptions().output(
          push("items", "$$ROOT"),
          sum("count", 1)
        )),
        addFields(
          Field("start",
            Document(
              Document(
                Document(
                  "$multiply" -> Seq(Document("$rand" -> Document(), "$count"),
                    )
                )
              )
            )
          )
        ),
        project(fields(excludeId(), computed("items", Document("$slice" -> Seq("$items", "$start", 10))))),
        unwind("$items")
      )
    )

然而,$multiply$slice文件都是无效的,因为Document只需要 Seq 的 2 个项目?

我不确定如何创建Document对象以传递给不具有$multiply$floor?等功能的运算符的查询创建者。

标签: mongodbscalamongodb-querymongo-scala-driver

解决方案


推荐阅读