如何在带有库mgo的golang中使用$ facet?

Eemr:

我开始学习mongoDb的性能改进。而且我有一个基于问题的汇总功能。我创建了一个包含3个字段产品,颜色和年份的基本测试集合:

{
    "product" : "car",
    "colour" : "red",
    "year" : "2019"
}
{
    "product" : "car",
    "colour" : "black",
    "year" : "2018"
}
{
    "product" : "bike",
    "colour" : "blue",
    "year" : "2014"
}
{
    "product" : "train",
    "colour" : "black",
    "year" : "2019"
}
{
    "product" : "ship",
    "colour" : "red",
    "year" : "2018"
}
{
    "product" : "car",
    "colour" : "red",
    "year" : "2016"
}
{
    "product" : "car",
    "colour" : "blue",
    "year" : "2015"
}
{
    "product" : "bike",
    "colour" : "white",
    "year" : "2014"
}
{
    "product" : "train",
    "colour" : "red",
    "year" : "2016"
}
{
    "product" : "ship",
    "colour" : "red",
    "year" : "2015"
}

由于性能问题,我希望将facet用于单个聚合阶段:

 db.getCollection('test').aggregate([
    {
        "$match":{
            "colour":"red"
        }
    },
    {
        "$facet": {
            "cntOfReds":[
                {"$group":{"_id": "$product", "count": {"$sum": 1}}}
            ],
            "cntOfRedsIn2015":[
                {"$match" :{"year": "2015"}},
                {"$group": {"_id": "$year", "count": {"$sum": 1}}}
            ]
    }   }

    ])

我们如何使用mgo.v2在golang上实现相同的查询并将结果设置为struct?

Burak Serdar:

使用mgo,您必须将一系列文档传递给Pipe

p:=collection.Pipe([]bson.M{
  {"$match": bson.M{"colour":"red"}},
  {"$facet": bson.M{ "cntOfReds":[]bson.M{{"$group":{"_id": "$product", "count": bson.M{"$sum":1}}}}},
  "cntOfRedsIn2015": ...

然后,运行管道并获得结果:

p.All(&results)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章