在golang中追加数据时,如何解决第一个参数必须是切片

时间:2018-09-12 08:51:35

标签: go

我正在根据条件进行查询,但是在附加条件时出现错误:我正在查询:-

query := bson.M{}
query["$or"] = []bson.M{}
if keyword != "" {
    query["$or"] = append(query["$or"], bson.M{"author": bson.RegEx{"(?i).*" + keyword + ".*", "i"}})
    query["$or"] = append(query["$or"], bson.M{"title": bson.RegEx{"(?i).*" + keyword + ".*", "i"}})
}
if types == "" {
    query["$or"] = append(query["$or"], bson.M{"type": bson.RegEx{"(?i).*" + types + ".*", "i"}})
}
if category == "" {
    query["$or"] = append(query["$or"], bson.M{"category": bson.RegEx{"(?i).*" + category + ".*", "i"}})
}
if tag == "" {
    query["$or"] = append(query["$or"], bson.M{"tags": bson.RegEx{"(?i).*" + tag + ".*", "i"}})
}
if len(ids) > 0 {
    query["_id"] = bson.M{"$in": ids}
}

存在用query["$or"]附加数据的问题。错误出来的是:-

  

附加的第一个参数必须是slice;具有界面{}

     

附加的第一个参数必须是slice;具有界面{}

     

附加的第一个参数必须是slice;具有界面{}

     

附加的第一个参数必须是slice;具有界面{}

     

附加的第一个参数必须是slice;具有界面{}

谁能告诉我如何解决这个问题。

1 个答案:

答案 0 :(得分:2)

the definition of bson.M可以看到,现在您正在传递interface{}。因此,您需要对某种类型的切片进行断言。

您要为先前的值分配类型[]bson.M的切片,因此只需声明该类型即可。示例:

    query["$or"] = append(query["$or"].([]bson.M), bson.M{"author": bson.RegEx{"(?i).*" + keyword + ".*", "i"}})

不过,可能更可读的是在末尾分配您的计算值:

or := []bson.M{}
// ...
    or = append(or, ...)

query["$or"] = or