我在用golang和mongodb实现非全文排除搜索时遇到麻烦。
它在mongo shell中工作:
db.collectionName.find({"comment":{"$not": /.*excludeThis.*/}})
这是做围棋不工作:
package main
import (
"log"
"regexp"
"github.com/night-codes/mgo-wrapper"
mgo "gopkg.in/mgo.v2"
)
type (
SomeStruct struct {
ID uint64 `form:"id" json:"id" bson:"_id"`
Name string `form:"name" json:"name" bson:"name"`
Comment string `form:"comment" json:"comment" bson:"comment"`
}
collectionStruct struct {
collection *mgo.Collection
}
obj map[string]interface{}
arr []interface{}
)
var (
some = collectionStruct{collection: mongo.DB("somedb").C("somecollection")}
)
func main() {
re := regexp.MustCompile(".*" + "exclude" + ".*")
query := obj{"comment": obj{"$not": re}}
result := []SomeStruct{}
if err := some.collection.Find(query).All(&result); err != nil {
log.Println("Error:", err)
return
}
log.Println("Result:")
for k := range result {
log.Printf("%+v\n", result[k])
}
log.Println("-------")
}
我遇到错误:
错误:reflect.Value.Interface:不能返回从未导出字段或方法获得的值
这里有什么方法可以使正则表达式工作或以其他方式实现它?
答案 0 :(得分:0)
答案是obj{"comment": obj{"$not": bson.RegEx{"$regex", ".*" + "exclude" + ".*"}}}
而不是obj{"comment": obj{"$not": re}}