为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
30秒到达战场 2022-10-17 19:36:31
蒙哥: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.Playererr = 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不包含数据。第二种情况有什么问题?
查看完整描述

1 回答

?
大话西游666

TA贡献1817条经验 获得超14个赞

以下解决了该问题:


var longBoi []models.Player

err = fmc.All(context.TODO(), &longBoi)

if err != nil {

    log.Panic(err)

}

Find()返回Cursor(),而不是文档。然后可以使用游标通过调用All()或其他方法迭代匹配过滤器的文档。


查看完整回答
反对 回复 2022-10-17
  • 1 回答
  • 0 关注
  • 112 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信