如何解决有关“过滤器”字段的问题必须是BSON类型的对象

时间:2019-08-28 04:58:04

标签: regex mongodb go find bson

我想在调用查找查询时解决此问题。

这正在运行Golang,并使用软件包““ gopkg.in/mgo.v2/bson”。

import "gopkg.in/mgo.v2"
import "fmt"

    /* mongodb */
    info := &mgo.DialInfo{
        Addrs:    []string{1.1.1.1+ ":" + 27017},
        Database: MgName,
        Username: MgId,
        Password: MgPasswd,
    }

    mgconn, err := mgo.DialWithInfo(info)
    if err != nil {
        fmt.Printf("[ERR ] mongodb : %s\n", err)
        return (-1)
    }

    /* error check on every access */
    mgconn.SetSafe(&mgo.Safe{})

    MgConn := mgconn.DB(MgName)

    col := MgConn.C("test")
    ip := "1.1.1.1"
    docs := []interface{}{
        bson.M{"message": bson.M{"$regex": bson.RegEx{`name:agent`, ""}}},
        bson.M{"message": bson.M{"$regex": bson.RegEx{ip, ""}}},
    }

    err := col.Find(docs).Sort("-time").One(&statistic)
    if err != nil {
        fmt.Printf("[INFO] mongodb select : %s\n", err)
    }

这是错误消息:

Failed to parse: filter: [ { message: { $regex: /name:agent/ } }, { 
message: { $regex: /192.168.18.61/ } } ]. 'filter' field must be of 
BSON type object.

1 个答案:

答案 0 :(得分:0)

Mongodb需要一个查询对象,但是您正在发送一个数组。我想您想对这两个条件进行逻辑或运算,所以请尝试以下操作:

docs := bson.M{"$or": []bson.M{
    {"message": bson.M{"$regex": bson.RegEx{`name:agent`, ""}}},
    {"message": bson.M{"$regex": bson.RegEx{ip, ""}}}}}