Сборка $ в массиве, содержащем как строки, так и шаблоны регулярных выражений - PullRequest
0 голосов
/ 02 февраля 2019

У меня есть коллекция Mongo, где каждый документ в коллекции имеет свойство массива sources.Поиск по этому свойству может быть комбинацией точных совпадений и регулярных выражений.Например, при использовании оболочки Mongo приведенный ниже запрос выполняет поиск документов с источником = «газовые клапаны» ИЛИ «шланг» содержится в элементе источника.Это работает так же, как я ожидаю

db.notice.find({sources:{$in:[/\bhose/i,'gas valves']}})

Все становится немного сложнее в MGO.Поскольку некоторые элементы в массиве $ in могут быть регулярными выражениями, а другие строки - единственный способ, которым я решил сделать запрос, это использовать $ or:

var regEx []bson.RegEx
var matches []string
// do stuff to populate regEx and matches
filter["$or"] = []bson.M{
    {"sources":bson.M{"$in":regEx}},
    {"sources":bson.M{"$in":matches}},
}

Есть ли способ, которым я мог бы создать одинфрагмент с регулярным выражением и строкой для использования с $ in - устраняя необходимость в $ или

1 Ответ

0 голосов
/ 02 февраля 2019

Использование []interface{}:

matches := []interface{}{
    bson.RegEx{"jo.+", "i"},
    "David",
    "Jenna",
}

db.C("people").Find(bson.M{"name": bson.M{"$in": matches}})

[] означает срез, а interface{} означает любой тип.[]interface{} - это кусочек любого типа.

...