mgo 将 mapreduce 转换为聚合命令
mgo convert mapreduce to aggregations command
我正在尝试将此函数从 mapreduce 转换为聚合。
上述函数的结果将是 [{pending 1}]
。
当我 运行 我的匹配组时,我从下面的代码中得到 [{pending 0}]
:
mat := bson.M{
"$match": bson.M{"device_id": devId},
}
grp := bson.M{
"$group": bson.M{
"_id": "$status",
"count": bson.M{
"$sum": 1,
},
},
}
pipe := c.Pipe([]bson.M{mat,grp})
pipe.One(&result)
但我认为 mongo shell 中的命令给出了 [{pending 1}]
.
db.getCollection("auth_sets").aggregate([
{
$match: {
device_id:"5c79601d152ece00012f5831"
}
},
{
$group: {
_id:"$status",
count: {
$sum: 1
}
}
},
]);
我怎样才能得到它,这样我的烟斗就可以 return [{pending 1}]
?
我正在更改它以便我可以使用 Mongo Atlas 不允许 mapreduce。
您的 mgo
查询结构没有问题,问题是 count
字段的名称。该模型期望 Value
:
var result []struct {
Status string `bson:"_id"`
Value int
}
所以把$group
阶段改成这样:
grp := bson.M{
"$group": bson.M{
"_id": "$status",
"value": bson.M{ // Note lowercased "value"!
"$sum": 1,
},
},
}
它应该可以工作。或者,如果可以,请更改模型:
var result []struct {
Status string `bson:"_id"`
Value int `bson:"count"`
}
只需要更改其中一个,以便与另一个对齐。
最后一件事:如果您使用 Query.One()
,则 result
不能是一个切片(One()
恰好需要一个文档)。
如果您使用 result
的切片类型,例如Query.All()
.
因此,如果您要使用 Query.One()
,请使用结果:
var result struct {
Status string `bson:"_id"`
Value int `bson:"count"`
}
还有Query.One()
和Query.All()
return一个错误,一定要检查一下!
我正在尝试将此函数从 mapreduce 转换为聚合。
上述函数的结果将是 [{pending 1}]
。
当我 运行 我的匹配组时,我从下面的代码中得到 [{pending 0}]
:
mat := bson.M{
"$match": bson.M{"device_id": devId},
}
grp := bson.M{
"$group": bson.M{
"_id": "$status",
"count": bson.M{
"$sum": 1,
},
},
}
pipe := c.Pipe([]bson.M{mat,grp})
pipe.One(&result)
但我认为 mongo shell 中的命令给出了 [{pending 1}]
.
db.getCollection("auth_sets").aggregate([
{
$match: {
device_id:"5c79601d152ece00012f5831"
}
},
{
$group: {
_id:"$status",
count: {
$sum: 1
}
}
},
]);
我怎样才能得到它,这样我的烟斗就可以 return [{pending 1}]
?
我正在更改它以便我可以使用 Mongo Atlas 不允许 mapreduce。
您的 mgo
查询结构没有问题,问题是 count
字段的名称。该模型期望 Value
:
var result []struct {
Status string `bson:"_id"`
Value int
}
所以把$group
阶段改成这样:
grp := bson.M{
"$group": bson.M{
"_id": "$status",
"value": bson.M{ // Note lowercased "value"!
"$sum": 1,
},
},
}
它应该可以工作。或者,如果可以,请更改模型:
var result []struct {
Status string `bson:"_id"`
Value int `bson:"count"`
}
只需要更改其中一个,以便与另一个对齐。
最后一件事:如果您使用 Query.One()
,则 result
不能是一个切片(One()
恰好需要一个文档)。
如果您使用 result
的切片类型,例如Query.All()
.
因此,如果您要使用 Query.One()
,请使用结果:
var result struct {
Status string `bson:"_id"`
Value int `bson:"count"`
}
还有Query.One()
和Query.All()
return一个错误,一定要检查一下!