Mongo 过滤器在 mongo shell 中工作,但在 go 中编写时不起作用

蒙哥:4.4 去:1.17.3


我正在尝试获取字符串字段值超过四个符号的文档。这是我在 mongo 的 shell 中使用的查询:


db.player.find({

    "name": { "$exists": true },

        "$expr": { "$gt": [ { "$strLenCP": "$name" }, 4 ] } 

    })

这是相同的查询,但编码为bsonfilter in go:


longName := bson.M{

    "name": bson.M{"$exists": true},

    "$expr": bson.M{

        "$gt": bson.A{

            bson.M{"$strLenCP": "$name"},

            4,

        },

    },

}

fmc, err := collection.Find(context.TODO(), longName)

if err != nil {

    log.Panic(err)

}

var longBoi models.Player

err = fmc.Decode(&longBoi)

if err != nil {

    log.Panic(err) 

    // panic here: 

    // 2021/12/15 15:53:46 EOF

    // panic: EOF

}

第一个将输出字符串字段值长度大于某个数字的所需文档。第二个将与 just EOF、 timestamp 和 callstack 错误。调试器说batch内部游标fmc不包含数据。


第二种情况有什么问题?


30秒到达战场
浏览 113回答 1
1回答

大话西游666

以下解决了该问题:var longBoi []models.Playererr = fmc.All(context.TODO(), &longBoi)if err != nil {    log.Panic(err)}Find()返回Cursor(),而不是文档。然后可以使用游标通过调用All()或其他方法迭代匹配过滤器的文档。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go