登录
首页 >  Golang >  Go问答

Mongo过滤器在Mongo shell中正常工作,但在Go编写中无效

来源:stackoverflow

时间:2024-02-21 16:27:24 366浏览 收藏

最近发现不少小伙伴都对Golang很感兴趣,所以今天继续给大家介绍Golang相关的知识,本文《Mongo过滤器在Mongo shell中正常工作,但在Go编写中无效》主要内容涉及到等等知识点,希望能帮到你!当然如果阅读本文时存在不同想法,可以在评论中表达,但是请勿使用过激的措辞~

问题内容

蒙戈:4.4 转到:1.17.3

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

db.player.find({
    "name": { "$exists": true },
        "$expr": { "$gt": [ { "$strlencp": "$name" }, 4 ] } 
    })

这里是相同的查询,但在 go 中编码为 bson 过滤器:

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
}

第一个将输出字符串字段值长度大于特定数字的所需文档。第二个将仅出现 eof、时间戳和调用堆栈错误。调试器显示光标 batch 内的 fmc 不包含任何数据。

第二种情况出了什么问题?


正确答案


以下解决了该问题:

var longBoi []models.Player
err = fmc.All(context.TODO(), &longBoi)
if err != nil {
    log.Panic(err)
}

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

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《Mongo过滤器在Mongo shell中正常工作,但在Go编写中无效》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>