本文详解如何使用 mgo(v2)驱动在 go 中构造 mongodb 的 `$or` 逻辑查询,包括语法结构、完整可运行示例及常见注意事项。
在 MongoDB 的 Go 生态中,mgo(虽已归档但仍在广泛维护的 v2 分支)是早期最常用的驱动之一。其查询语法高度贴近原生 BSON 表达,但初学者易在嵌套结构上出错。核心要点在于:$or 接收一个文档数组([]bson.M),每个元素均为独立的查询条件(bson.M),且各条件之间为逻辑“或”关系。
✅ 正确语法结构如下:
bson.M{
"$or": []bson.M{
bson.M{"uuid": "some-uuid"},
bson.M{"name": "John"},
bson.M{"email": bson.M{"$regex": "^test@.*\\.com$"}},
},
}⚠️ 常见错误包括:
以下是一个完整、可直接运行的示例(兼容 Go 1.4+ 和 MongoD
B 2.6+):
package main
import (
"fmt"
"log"
"gopkg.in/mgo.v2"
"gopkg.in/mgo.v2/bson"
)
type Person struct {
Num int `bson:"num"`
Uuid string `bson:"uuid"`
Name string `bson:"name"`
}
func main() {
session, err := mgo.Dial("localhost:27017")
if err != nil {
panic(err)
}
defer session.Close()
c := session.DB("test").C("people")
// 清理测试环境
c.DropCollection()
// 插入测试数据
if err = c.Insert(
&Person{1, "UUID1", "Joe"},
&Person{2, "UUID2", "Jane"},
&Person{3, "UUID3", "Didier"},
); err != nil {
log.Fatal(err)
}
// 构造 $or 查询:查找 uuid="UUID0" OR name="Joe"
query := bson.M{
"$or": []bson.M{
bson.M{"uuid": "UUID0"},
bson.M{"name": "Joe"},
},
}
var result Person
if err = c.Find(query).One(&result); err != nil {
log.Printf("No match found (expected for UUID0): %v", err)
// 注意:此处因 UUID0 不存在,会返回 mgo.ErrNotFound,属正常行为
return
}
fmt.Printf("Found: %+v\n", result) // 输出: Found: {Num:1 Uuid:"UUID1" Name:"Joe"}
}? 关键提示:
掌握 $or 的正确构造方式,是编写灵活、高效 MongoDB 查询的基础能力——它让“任一条件满足即命中”的业务逻辑(如多字段模糊搜索、复合权限校验)得以简洁实现。
# go
# mongodb
# session
# ai
# String
# sort
# select
# Interface
# map
# 多字
# 是一个
# 多个
# 在此
# 均为
# 不存在
# 可直接
# 但仍
# 如何使用
# 多条
相关文章:
武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?
如何在Golang中引入测试模块_Golang测试包导入与使用实践
网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?
C#如何序列化对象为XML XmlSerializer用法
Swift中switch语句区间和元组模式匹配
建站主机系统SEO优化与智能配置核心关键词操作指南
,购物网站怎么盈利呢?
专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?
高防服务器租用首荐平台,企业级优惠套餐快速部署
南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?
Python路径拼接规范_跨平台处理说明【指导】
如何用PHP快速搭建CMS系统?
如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本
如何通过wdcp面板快速创建网站?
青岛网站设计制作公司,查询青岛招聘信息的网站有哪些?
成都网站制作公司哪家好,四川省职工服务网是做什么用?
自助网站制作软件,个人如何自助建网站?
武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?
移民网站制作流程,怎么看加拿大移民官网?
如何基于PHP生成高效IDC网络公司建站源码?
如何选择高效稳定的ISP建站解决方案?
太平洋网站制作公司,网络用语太平洋是什么意思?
开封网站制作公司,网络用语开封是什么意思?
微网站制作教程,我微信里的网站怎么才能复制到浏览器里?
如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法
如何选择可靠的免备案建站服务器?
如何挑选最适合建站的高性能VPS主机?
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
我的世界制作壁纸网站下载,手机怎么换我的世界壁纸?
导航网站建站方案与优化指南:一站式高效搭建技巧解析
如何在阿里云香港服务器快速搭建网站?
如何配置支付宝与微信支付功能?
济南网站制作的价格,历城一职专官方网站?
如何快速搭建安全的FTP站点?
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
如何做网站制作流程,*游戏网站怎么搭建?
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
如何通过多用户协作模板快速搭建高效企业网站?
百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?
如何解决VPS建站LNMP环境配置常见问题?
建站之星3.0如何解决常见操作问题?
python的本地网站制作,如何创建本地站点?
宝盒自助建站智能生成技巧:SEO优化与关键词设置指南
如何挑选优质建站一级代理提升网站排名?
安云自助建站系统如何快速提升SEO排名?
北京制作网站的公司,北京铁路集团官方网站?
怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
如何高效利用200m空间完成建站?
如何用PHP快速搭建高效网站?分步指南
*请认真填写需求信息,我们会在24小时内与您取得联系。