1

我正在尝试使用带有子集的 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)))
    )

以上编译和一切,但我不明白接下来会发生什么......我以前从未使用过子集......正确方向的线索或提示会很棒。

4

1 回答 1

0

Subset 不提供对 MongoDB 执行查询的方法,它唯一关心的是 Mongo Java Driver 的方法参数,包括文档及其字段。

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

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

于 2013-08-20T16:25:10.613 回答