Golang MongoDB 在列表上使用 $in 运算符 - 结果参数必须是切片地址
Golang MongoDB using $in operator on list - result argument must be a slice address
我有以下 Mongo 查询,我正在尝试使用 github.com/globalsign/mgo
翻译成 Go:
db.getCollection('cluster').find({"clusterName": {"$in": ["clusterA", "clusterB"]}})
“clusterName”是一个字符串字段。基本上,天真的替代方法是对列表中的每个值执行多次调用 mongo。
我写的查询:
func ReadClusters(clusterNames []string) (*[]kusto.Cluster, error) {
var clusters *[]kusto.Cluster
err := readObjects(clusterCollection, bson.M{"clusterName": bson.M{"$in": clusterNames}}, &clusters, "" /* sortField */)
if err != nil {
return nil, err
}
return clusters, nil
}
我的助手函数:
func readObjects(collection string, query bson.M, dest interface{}, sortField string) error {
err := getDocuments(collection, query, dest, sortField)
if err != nil {
if err == mgo.ErrNotFound {
return ErrNotFound
}
return err
}
return nil
}
func getDocuments(collectionName string, query bson.M, dest interface{}, sortField string) error {
session := client.Copy()
defer session.Close()
collection := getCollection(session, collectionName)
find := collection.Find(query)
if sortField != "" {
find = find.Sort(sortField)
}
return find.All(dest)
}
我遇到错误:
2020/07/09 11:58:46 http: panic serving [::1]:54085: result argument
must be a slice address
我目前使用的是Go1.11,go.mod
下看到的mgo版本是github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8
clusters
已经是slice的指针类型,所以取它的地址就是指向slice的指针。
声明它是一个非指针切片:
var clusters []kusto.Cluster
我有以下 Mongo 查询,我正在尝试使用 github.com/globalsign/mgo
翻译成 Go:
db.getCollection('cluster').find({"clusterName": {"$in": ["clusterA", "clusterB"]}})
“clusterName”是一个字符串字段。基本上,天真的替代方法是对列表中的每个值执行多次调用 mongo。
我写的查询:
func ReadClusters(clusterNames []string) (*[]kusto.Cluster, error) {
var clusters *[]kusto.Cluster
err := readObjects(clusterCollection, bson.M{"clusterName": bson.M{"$in": clusterNames}}, &clusters, "" /* sortField */)
if err != nil {
return nil, err
}
return clusters, nil
}
我的助手函数:
func readObjects(collection string, query bson.M, dest interface{}, sortField string) error {
err := getDocuments(collection, query, dest, sortField)
if err != nil {
if err == mgo.ErrNotFound {
return ErrNotFound
}
return err
}
return nil
}
func getDocuments(collectionName string, query bson.M, dest interface{}, sortField string) error {
session := client.Copy()
defer session.Close()
collection := getCollection(session, collectionName)
find := collection.Find(query)
if sortField != "" {
find = find.Sort(sortField)
}
return find.All(dest)
}
我遇到错误:
2020/07/09 11:58:46 http: panic serving [::1]:54085: result argument must be a slice address
我目前使用的是Go1.11,go.mod
下看到的mgo版本是github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8
clusters
已经是slice的指针类型,所以取它的地址就是指向slice的指针。
声明它是一个非指针切片:
var clusters []kusto.Cluster