Mongodb';具有子集和Scala的s聚合框架

Mongodb';具有子集和Scala的s聚合框架,mongodb,scala,subset,Mongodb,Scala,Subset,我正在尝试使用Mongo的聚合框架和子集,我已经查看了项目的测试: 以及文档中的示例: 但我仍然不知道如何从TraversableOnce到一个实际的查询,这就是我一直在尝试的 工作mongo查询: db.products.aggregate( {$unwind: "$c_ids"}, {$match:{c_ids:{$in: [ ObjectId("51e463ba2b3a972d7300091f"), ObjectId("51cd8dbe2b3a97736

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

以及文档中的示例:

但我仍然不知道如何从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)))
    )
上面的编译和一切,但我不明白下一步是什么。。。我以前从未使用过子集。。。一个正确方向的线索或提示就好了

子集不提供对MongoDB及其子系统执行查询的方法 唯一关心的是MongoJava驱动程序的方法参数,包括 文档及其字段

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

有关更多信息,请参阅