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

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

相关推荐
cmes_love2 小时前
Level 2逐笔成交历史数据下载方法笔记
数据库·笔记·oracle
swordbob3 小时前
MySQL字符集陷阱:从Oracle迁移踩坑到utf8mb4强制规范
数据库·sql
牛油果子哥q3 小时前
【C++ STL string 】C++ STL string 终极精讲:底层原理、内存机制、全套API、深浅拷贝、易错坑点与工程实战规范
数据库·c++
十五年专注C++开发3 小时前
MySql中各种功能用sql语句实现总结
数据库·sql·mysql
数据库小学妹3 小时前
AI时代数据库怎么选?多模融合、数据统一存储与选型实战指南
数据库·人工智能·经验分享·ai
Albert Edison3 小时前
【Redis】Centos7.9 安装 Redis 5 教程
数据库·redis·缓存
云计算磊哥@4 小时前
运维开发宝典026-MySQL02数据库表操作
运维·数据库·运维开发
小二·4 小时前
Redis 内存溢出(OOM)排查与恢复实战
数据库·redis·bootstrap
pqk6V6Vep4 小时前
Redis 分布式锁进阶第一篇讲解
数据库·redis·分布式
giaz14n9X4 小时前
Redis 分布式锁进阶第六十一篇
数据库·redis·分布式