我正在尝试使用带有子集的 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)))
)
以上编译和一切,但我不明白接下来会发生什么......我以前从未使用过子集......正确方向的线索或提示会很棒。