如何使用ReactiveMongo聚合

时间:2016-07-01 01:57:56

标签: mongodb scala playframework reactivemongo play-reactivemongo

所以,我需要通过对象数组中的字段对MongoDB上的集合进行排序。

我有

"columns": [{
    "kind": "FirstKind",
    "descriptor": "Description1",
    "data": "Data to be sorted"
},{
    "kind": "SecondKind",
    "descriptor": "Description2",
    "data": "Data to be sorted"
}]

我想要实现的是选择“FirstKind”“Description1”或“SecondKind”“Description2”,并按字段数据对集合进行排序。我在MongoDB上找到了一个解决方案:

db.getCollection('results').aggregate(
    [{ 
        "$match": { 
           "$and": [{
               "columns.kind": "FirstKind"
            }, {
               "columns.descriptor": "Name" 
            }] 
        } 
    },{ 
        "$sort": { 
           "columns.data": -1 
         } 
    },{ 
        "$limit": 20 
    }]
)

我现在的问题是如何将其转换为Scala上的ReactiveMongo。我一直试图理解这个文档:http://reactivemongo.org/releases/0.11/documentation/advanced-topics/aggregation.html但我真的很困惑。有没有人在Scala上使用ReactiveMongo聚合?谢谢!

1 个答案:

答案 0 :(得分:1)

我同意,这不是ReactiveMongo中最直接的事情。

我试图将您的代码翻译成下面的ReactiveMongo聚合查询语法。但是我没有运行它,所以你可能需要调整一下。

val dao = reactiveMongoApi.db.collection[BSONCollection]("results")
import dao.BatchCommands.AggregationFramework._

dao.aggregate(
  Match(BSONDocument(
    "columns.kind" -> "FirstKind",
    "columns.descriptor" -> "Name")),
  List(
    Sort(Descending("limit")),
    Limit(20)))