如何使$not正则表达式查询在 Go 中工作



我在使用 golang 和 mongodb 实现非全文排除搜索时遇到问题。

这是在 mongo shell 中的工作:

db.collectionName.find({"comment":{"$not": /.*excludeThis.*/}})

它在 Go 中不起作用:

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("%+vn", result[k])
    }
    log.Println("-------")
}

我收到错误:

错误:反映。值接口:无法返回从未导出的字段或方法获取的值

这里有没有办法让正则表达式工作或以其他方式实现它?

答案是obj{"comment": obj{"$not": bson.RegEx{Pattern: ".*" + "exclude" + ".*"}}}而不是obj{"comment": obj{"$not": re}}

最新更新