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入门+深入(二)--项目实战

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

相关推荐
枫叶丹41 小时前
复杂SQL性能突围:代价驱动的连接条件下推策略与工程实践
数据库·sql·金仓数据库
聆风吟º1 小时前
直击复杂 SQL 瓶颈:金仓基于代价的连接条件下推技术落地
java·数据库·sql·kingbasees
努力进修2 小时前
复杂查询性能优化:连接条件下推的代价模型设计与实践
数据库·sql·性能优化
原来是猿2 小时前
Linux-【文件系统上】
linux·服务器·数据库
小陳参上6 小时前
用Python创建一个Discord聊天机器人
jvm·数据库·python
changhong19867 小时前
如何在 Spring Boot 中配置数据库?
数据库·spring boot·后端
执笔画情ora10 小时前
Postgresql数据库管理-pg_xact
数据库·postgresql·oracle
南棱笑笑生10 小时前
20260310在瑞芯微原厂RK3576的Android14查看系统休眠时间
服务器·网络·数据库·rockchip
XDHCOM11 小时前
ORA-32152报错咋整啊,数据库操作遇到null number问题远程帮忙修复
服务器·数据库·oracle