2 回答
TA贡献1868条经验 获得超4个赞
您尚未将“每个”管道阶段定义为bson.M. 它是 的“数组” bson.M,因此出现错误:
operations := []bson.M{
bson.M{
"$match": bson.M{
"date": bson.M{ "$gte": gte, "$lte": lte }
}
},
bson.M{
"group": bson.M{ "_id": "$user_id" }
}
}
也$and没有必要。无论如何,所有MongoDB 查询条件都已经是“AND”表达式。$gte和$lte作为同一对象表达式中的键的组合已经是同一"date"属性上的 AND 条件。就像在$match对象中添加更多键一样。
在 JavaScript shell 中,这与以下内容相同:
var operations = [
{ "$match": { "date": { "$gte": gte, "$lte": lte } } },
{ "$group": { "_id": "$user_id" } }
];
所以你需要记住,每个 JavaScript 对象表示法都{}等于一个.bson.M{}语句。这就是你在这个库中标记 BSON 对象的方式。
注意: { "$group": { "_id": "$user_id } }除了返回每个“不同”的"user_id"值外,不会做任何有意义的事情。因此,您可能希望在任何实际结果中都有更多的累加器选项
TA贡献1824条经验 获得超5个赞
我相信这就是你想要的:
operations := []bson.M{
bson.M{
"$match":bson.M{
"$and":[]interface{}{
bson.M{"age":bson.M{"$gte":gte}},
bson.M{"age":bson.M{"$lte":lte}},
},
},
},
bson.M{
"$group":bson.M{"_id":"$user_id"},
},
}
你只是在“$and”之前忘记了 bson.M 。
编辑:看起来也很古老,我继续修复了这些。
编辑 2:我错过的 bson.M 比我看到的最初 3 个错过的要多。
- 2 回答
- 0 关注
- 188 浏览
添加回答
举报