所以,我需要通过对象数组中的字段对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聚合?谢谢!
答案 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)))