Mongodb's Aggregation Framework with Subset and Scala



我正在尝试将Mongo的聚合框架与子集一起使用,我已经查看了该项目的测试:

https://github.com/osinka/subset/blob/master/src/test/scala/aggregation/pipelinesSpec.scala

文档中的示例:

http://osinka.github.io/subset/Examples.html

但是仍然不知道如何从TraversableOnce到实际的查询,这就是我一直在尝试的。

正在运行的mongo查询:

db.products.aggregate(
    {$unwind: "$c_ids"},
    {$match:{c_ids:{$in: [
    ObjectId("51e463ba2b3a972d7300091f"),
    ObjectId("51cd8dbe2b3a977368000024"),
    ObjectId("51e70d052b3a974795000452"),
    ObjectId("51cda94f2b3a97739a000025")
    ]}}},
    {$group:{_id:"$c_ids",total:{$sum:1},sale:{$sum:{
$cond: [{$eq: ["$on_sale",true]},1,0]
}}}})

以上工作如预期,这就是我目前所了解的:

val cId = "c_ids".fieldOf[ObjectId]
val total = "total".fieldOf[Int]
val sale = "sale".fieldOf[Int]
val on_sale = "on_sale".fieldOf[Boolean]
val query = db("products").aggregate(
      Unwind(cId),
      Match(cId in List[ObjectId](new ObjectId("51cda94f2b3a97739a000025"))),
      Group(cId, 
      total -> Group.Sum(1), 
      sale -> Group.Sum(Project.Cond(Project.Eq(on_sale, true), 1, 2)))
    )

上面编译了所有内容,但我不明白接下来会发生什么。。。我以前从未使用过子集。。。一个正确的线索或提示将是伟大的。

Subset没有提供对MongoDB执行查询的方法唯一关心的是MongoJava驱动程序的方法参数,包括文档及其字段。

因此,一旦构建了聚合查询——现在可以运行它了,val query应该是AggregationOutput结果——您可以调用results()来获得实际的聚合结果。

有关更多信息,请参阅将聚合框架与java驱动程序一起使用。

最新更新