登录
首页 >  Golang >  Go问答

如何在 golang 中使用 $facet 和 mgo 库?

来源:stackoverflow

时间:2024-04-25 18:15:33 200浏览 收藏

今天golang学习网给大家带来了《如何在 golang 中使用 $facet 和 mgo 库?》,其中涉及到的知识点包括等等,无论你是小白还是老手,都适合看一看哦~有好的建议也欢迎大家在评论留言,若是看完有所收获,也希望大家能多多点赞支持呀!一起加油学习~

问题内容

我开始学习 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 上实现相同的查询并将结果设置为结构体?


解决方案


使用 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)

理论要掌握,实操不能落!以上关于《如何在 golang 中使用 $facet 和 mgo 库?》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>