Как решить первый аргумент должен быть срез при добавлении данных в Голанг - PullRequest
0 голосов
/ 12 сентября 2018

Я делаю запрос на основе условий, но при добавлении к ним возникает ошибка: -

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 голосов
/ 12 сентября 2018

Прямо сейчас вы передаете interface{}, как вы можете видеть из определения bson.M .Таким образом, вам нужно подтвердить это для некоторого типа среза.

Вы назначаете срез типа []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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...