【问题标题】:Mongodb's Aggregation Framework with Subset and ScalaMongodb 的带有 Subset 和 Scala 的聚合框架
【发布时间】:2013-08-21 00:25:10
【问题描述】:

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


    【解决方案1】:

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

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

    更多信息请参见using the aggregation framework with the java driver

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-02
      • 2013-07-20
      • 2012-09-24
      • 1970-01-01
      相关资源
      最近更新 更多