MongoDB入门+深入(三)--mongdbSql

目录

一、MongoDB-SQL

[1、查询条件运算符:expr 和 regex](#1、查询条件运算符:expr 和 regex)

[1.1、expr 运算符](#1.1、expr 运算符)

[expr 常用操作符](#expr 常用操作符)

[1.2、regex 运算符](#1.2、regex 运算符)

[常用选项(options)](#常用选项(options))

2、聚合框架

[2.1、lookup:多表关联查询](#2.1、lookup:多表关联查询)


一、MongoDB-SQL

1、查询条件运算符:expr 和 regex

1.1、$expr 运算符

$expr 允许你在查询语句中使用聚合表达式,实现字段间的比较和复杂条件查询。

注解:$expr 主要用于比较同一文档中不同字段的值,或者使用聚合表达式进行条件判断。

$expr 常用操作符

|---------|--------|--------------------------------------|
| 操作符 | 描述 | 示例 |
| eq | 等于 | eq: "$field1", "$field2" |
| ne | 不等于 | ne: "$field1", "value" |
| gt | 大于 | gt: "$field1", 100 |
| lt | 小于 | lt: "$field1", "$field2" |
| and | 逻辑与 | and: expr1, expr2 |
| or | 逻辑或 | or: expr1, expr2 |
| concat | 字符串连接 | concat: "$fname", " ", "$lname" |
| substr | 字符串截取 | substr: "$name", 0, 3 |

**注:**使用 expr 时,字段名前需要加 符号,表示引用字段值而非字面量。

bash 复制代码
-- 查询xx_tbl记录中field1字段与field2字段值相等
db.xx_tbl.find({
  $expr: { $eq: ["$field1", "$field2"] }
})

1.2、$regex 运算符

$regex 提供正则表达式功能,用于模式匹配字符串查询。

**注解:**正则表达式是强大的文本匹配工具,$regex 让你能在 MongoDB 中利用这一功能。

bash 复制代码
db.collection.find({
  field: { $regex: /pattern/, $options: 'options' }
})

// 或者
db.collection.find({
  field: { $regex: 'pattern', $options: 'options' }
})
常用选项($options)
选项 描述
i 不区分大小写
m 多行匹配
x 忽略空白字符
s 允许点字符(.)匹配所有字符

2、聚合框架

聚合框架是MongoDB的高级查询语言,它允许我们通过转换和合并多个文档中的数据来生成新的单个文档中不存在的信息。

|----------|-----------------------|
| 命令 | 功能描述 |
| project | 指定输出文档里的字段. | | match | 选择要处理的文档,与fine()类似。 |
| limit | 限制传递给下一步的文档数量。 | | skip | 跳过一定数量的文档。 |
| unwind | 扩展数组,为每个数组入口生成一个输出文档。 | | group | 根据key来分组文档。 |
| sort | 排序文档。 | | geoNear | 选择某个地理位置附近的的文档。 |
| out | 把管道的结果写入某个集合。 | | redact | 控制特定数据的访问。 |
| $lookup | 多表关联(3.2版本新增) |

2.1、$lookup:多表关联查询

命令语法

bash 复制代码
{
   $lookup:
     {
       from: <collection to join>,
       localField: <field from the input documents>,
       foreignField: <field from the documents of the "from" collection>,
       as: <output array field>
     }
}

语法说明:

|--------------|--------------------------------------------------------------------------------------------|
| 语法值 | 解释说明 |
| from | 同一个数据库下等待被Join的集合。 |
| localField | 源集合中的match值,如果输入的集合中,某文档没有 localField 这个Key(Field),在处理的过程中,会默认为此文档含 有 localField:null的键值对。 |
| foreignField | 待Join的集合的match值,如果待Join的集合中,文档没有foreignField 值,在处理的过程中,会默认为此文档含有 foreignField:null的键值对。 |
| as | 为输出文档的新增值命名。如果输入的集合中已存在该值,则会覆盖掉, |

此语法类似SQL

sql 复制代码
SELECT *, <output array field>
FROM collection
WHERE <output array field> IN (SELECT *
                               FROM <collection to join>
                               WHERE <foreignField>= <collection.localField>);

例:

bash 复制代码
-- xx1_tbl 与 xx2_tbl进行关联
SELECT *, <output array field1>
FROM xx1_tbl 
WHERE <output array field1> IN (SELECT *
                               FROM xx2_tbl
                               WHERE <filed3 = false);

db.xx1_tbl.aggregate([
   {
     $lookup:
       {
         from: "xx2_tbl",
         localField: "filed1",
         foreignField: "filed2",
         as: "xx2_tbl_docs"
       }
  },
  { $match : {"xx2_tbl_docs.filed3" :false} }
])

MongoDB入门+深入(一)

MongoDB入门+深入(二)--项目实战

每天⽤⼼记录⼀点点。内容也许不重要,但习惯很重要!
干我们这行,啥时候懈怠,就意味着长进的停止,长进的停止就意味着被淘汰,只能往前冲,直到凤凰涅槃的一天!

相关推荐
葫芦和十三20 分钟前
图解 MongoDB 21|选举与 failover:Primary 是怎么选出来的
后端·mongodb·agent
jiayou6412 小时前
KingbaseES 表级与列级加密完全指南
数据库·后端
葫芦和十三1 天前
图解 MongoDB 19|Oplog:复制的真正载体,不是文档是操作
后端·mongodb·agent
葫芦和十三1 天前
图解 MongoDB 20|复制延迟与 catch up:Secondary 为什么跟不上
后端·mongodb·agent
GBASE1 天前
G术时刻 |GBase 8s数据库事务并发控制之封锁技术介绍(下)
数据库
xiezhr2 天前
逛GitHub发现了一款免费的带AI功能的数据库管理工具
数据库·ai编程·dba
吃糖的小孩3 天前
给 QQ AI 机器人设计“可控记忆”:会话摘要、手动长期记忆与角色卡边界
数据库
葫芦和十三3 天前
图解 MongoDB 17|大集合与工作集:数据超过内存怎么办
后端·mongodb·面试
葫芦和十三3 天前
图解 MongoDB 18|复制集拓扑:Primary、Secondary 和 Arbiter 的分工
后端·mongodb·面试
葫芦和十三3 天前
图解 MongoDB 15|journal 与持久化:写入怎么不丢,崩溃怎么恢复
后端·mongodb·面试