MongoDB——模糊查询的两种方法

本文介绍了如何在MongoDB中使用方法一的类似SQLLIKE查询以及方法二的正则表达式进行模糊查询,包括查询字段以、尾、特定字符开始或结束的情况,以及否定匹配的例子。

方法一:类似于结构性数据库的like

db.users.find({fname: /zhangsan/});

对应mysql的like用法:select * from users where fname like '%zhangsan%';

(1)如果要模糊查询以什么开头,方法如下:

db.users.find({fname: /^zhangsan/});

(2)如果要模糊查询以什么结尾,方法如下:

db.users.find({fname: /zhangsan^/});

方法二:正则表达式

常见的正则表达式

.点号:在正则表达式中是一个通配符,它代表所有字符和数字
*号:表示前面的匹配符出现>=0次;
+号:表示前面的匹配符出现>=1次;
?号:表示前面的匹配符出现<=1次;
{666}:表示前面的匹配符出现666次;

{666,888}:表示前面的匹配符出现666~888次;

^:匹配开头;
$:匹配结尾;

(1)模型匹配user集合中name列包含"zhangsan"的数据。

db.users.find({"name":{$regex:/zhangsan/}});

(2)查询某字段开头是"string"的记录,等同于sql的  like ‘string%’

db.mycollection.find({"content.value":{$regex:"^姚明"}})


(3)查询某字段结尾是"string"的记录,等同于sql的 like ‘%string’

db.mycollection.find({"content.value":{$regex:"唱歌$"}})

(4)查询某字段结尾是"string"的记录,等同于sql的 like ‘%string’

db.mycollection.find({"content.value":{$regex:"唱歌$"}})

(5)查询某字段不是"string"打头的记录,等同于sql的not  like ‘有限%’  and like '%公司' 

db.mycollection.find({"content.value":{$regex:"^[^有][^限]公司$"}})

### MongoDB 中查询包含特定字符串或内容的方法MongoDB 的 Compass 工具中,可以使用 `$regex` 来执行正则表达式匹配操作以查找包含特定字符串的内容[^1]。具体来说,可以通过以下两种方式来实现: #### 方法一:使用 `$regex` 进行模糊匹配 通过 `$regex` 可以指定一个正则表达式模式来进行匹配。例如,假设有一个集合 `products`,其中存储了商品的信息(包括标题和描述),如果希望找到所有标题或描述中包含关键字 `"phone"` 的文档,则可以编写如下查询语句: ```javascript db.products.find({ $or: [ { title: { $regex: "phone", $options: "i" } }, { description: { $regex: "phone", $options: "i" } } ]}) ``` 上述代码中的 `$options: "i"` 表示忽略大小写进行匹配[^3]。 #### 方法二:利用全文索引功能 除了基于正则表达式的解决方案外,还可以考虑启用 MongoDB 的 **全文搜索** 功能。这通常适用于更复杂的场景下对文本数据的高效检索需求。创建全文索引之后,能够显著提升涉及大量文本字段的操作效率。以下是设置过程的一个简单例子: ```javascript // 创建复合型文本索引 db.products.createIndex( { title: "text", description: "text" } ) // 使用 $text 查询接口完成相似度排序后的结果获取 db.products.find( { $text: { $search: "phone" } } ) .sort( { score: { $meta: "textScore" } } ); ``` 以上方法均能有效满足从数据库记录里筛选出含有目标子串条目的业务逻辑诉求。 ### 数据备份注意事项 另外值得注意的是,在实际开发过程中为了保障重要资料的安全性以及便于后续分析处理等工作开展前做好充分准备显得尤为重要。此时可借助官方提供的实用程序——mongodump完成增量式导出作业[^2]: ```bash mongodump --host=dbhost --db=dbname --out=/path/to/directory/ ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

科技颠覆未来

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值