我有一个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的需求
答案 0 :(得分:1)
使用[]interface{}
:
matches := []interface{}{
bson.RegEx{"jo.+", "i"},
"David",
"Jenna",
}
db.C("people").Find(bson.M{"name": bson.M{"$in": matches}})
[]
表示切片,而interface{}
表示任何类型。总而言之,[]interface{}
是任何类型的切片。