构建包含字符串和正则表达式模式的$ in数组

时间:2019-02-02 02:48:35

标签: mongodb go mgo

我有一个Mongo集合,集合中的每个文档都有一个sources数组属性。在此属性上的搜索可以是完全匹配和正则表达式的组合。例如,当使用Mongo shell时,下面的查询将搜索源项目中包含source ='gas valve'或'hose'的文档。符合我的预期

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}},
}

是否可以通过$ ex使用正则表达式和字符串构造一个切片,从而消除了对$ or的需求

1 个答案:

答案 0 :(得分:1)

使用[]interface{}

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

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

[]表示切片,而interface{}表示任何类型。总而言之,[]interface{}是任何类型的切片。