程序开发 · 2023年11月8日

如何解决追加数据时第一个参数必须是切片的问题

当前位置: > > > > 如何解决追加数据时第一个参数必须是切片的问题

来源:stackoverflow
2024-04-20 08:54:36
0浏览
收藏

今天给大家带来了《如何解决追加数据时第一个参数必须是切片的问题》,其中涉及到的知识点包括等等,无论你是小白还是老手,都适合看一看哦~有好的建议也欢迎大家在评论留言,若是看完有所收获,也希望大家能多多点赞支持呀!一起加油学习~

问题内容

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

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"] 附加数据时出现问题。出现的错误是:-

附加的第一个参数必须是切片;有接口 {} 附加的第一个参数必须是切片;有接口 {} 附加的第一个参数必须是切片;有接口 {} 附加的第一个参数必须是切片;有接口 {} 附加的第一个参数必须是切片;有接口 {}

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

解决方案

现在您正在传递一个 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

今天关于《如何解决追加数据时第一个参数必须是切片的问题》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注公众号!