猿问

如何使 $not regexp 查询在 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("%+v\n", result[k])

    }

    log.Println("-------")

}

我收到错误:


错误:reflect.Value.Interface:无法返回从未导出的字段或方法获得的值


这里有什么方法可以使正则表达式工作或以其他方式实现它吗?


心有法竹
浏览 100回答 1
1回答

慕后森

答案是obj{"comment": obj{"$not": bson.RegEx{Pattern: ".*" + "exclude" + ".*"}}}代替obj{"comment": obj{"$not": re}}
随时随地看视频慕课网APP

相关分类

Go
我要回答