登录
首页 >  Golang >  Go问答

正确地实现使用官方 mongo-go-driver 进行多字段查询

来源:stackoverflow

时间:2024-02-23 12:42:24 131浏览 收藏

大家好,我们又见面了啊~本文《正确地实现使用官方 mongo-go-driver 进行多字段查询》的内容中将会涉及到等等。如果你正在学习Golang相关知识,欢迎关注我,以后会给大家带来更多Golang相关文章,希望我们能一起进步!下面就开始本文的正式内容~

问题内容

我有一个数据库字段:

"sessionid": "c-dhf",
            "given": "nurse ",
            "family": "shark",
            "name": "shark, nurse",

我正在尝试创建一个查询,该查询将查询数据库,查找家族以“s”开头、给定名称以“n”开头的记录。我正在使用以下内容来创建过滤器。

{"sessionid", "c-dhf"},
        {"$and", bson.a{
            bson.d{{"family", primitive.regex{pattern: "^s", options: "i"}}},
            bson.d{{"given", primitive.regex{pattern: "^n", options: "i"}}},
        }},
    }

查找中使用的过滤器值为:

[{sessionid c-dhf} {$and [[{family {"pattern": "^s", "options": "i"}}] [{given {"pattern": "^n", "options": "i"}}]]}]

发现的是:

cursor, err := collection.Find(context.TODO(), filter, findOptions)

它返回数据库中的所有记录,就好像它甚至没有查看过滤器一样。

多字段通配符查询的正确 go 语法是什么?


解决方案


默认情况下,所有列出的条件都采用逻辑 and 连接 ($and),因此您无需添加:

filter := bson.d{
    {"sessionid", "c-dhf"},
    {"family", primitive.regex{pattern: "^s", options: "i"}},
    {"given", primitive.regex{pattern: "^n", options: "i"}},
}

如果您想要逻辑或连接,您使用的语法和结构将是合适的:如果您想要具有给定会话 id 的文档,并且其姓氏以 s 开头或给定名称以 n 开头。可能看起来像这样:

filter := bson.D{
    {"sessionid", "C-dhf"},
    {"$or", bson.A{
        bson.D{{"family", primitive.Regex{Pattern: "^s", Options: "i"}}},
        bson.D{{"given", primitive.Regex{Pattern: "^n", Options: "i"}}},
    }},
}

理论要掌握,实操不能落!以上关于《正确地实现使用官方 mongo-go-driver 进行多字段查询》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

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