我正在根据条件进行查询,但是在附加条件时出现错误:我正在查询:-
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;具有界面{}
谁能告诉我如何解决这个问题。
答案 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