gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 22:27:53 24 4
gpt4 key购买 nike

我开始学习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?

最佳答案

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

关于mongodb - 如何在带有库mgo的golang中使用$ facet?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58802198/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com