MongoDB 查询文档中使用文本选择器($text)

news2024/11/27 0:21:28

之前我们介绍过使用比较选择器、逻辑选择器、元素选择器、数组选择器查询文档,如果您需要进一步了解,可以参考:

MongoDB 查询文档中使用比较选择器、逻辑选择器https://blog.csdn.net/m1729339749/article/details/129965699

MongoDB 查询文档中使用元素选择器、数组选择器https://blog.csdn.net/m1729339749/article/details/129971708

本篇,我们介绍使用$text选择器查询文档:

一、准备工作

初始化学生信息数据

db.studentInfos.insertMany([
    { "_id": 1, "name": "张三1", "sports": "羽毛球、乒乓球", fruits: "apple, banana", introduce: "大家好,我喜欢运动,但是我不喜欢铅球,因为它太重了" },
    { "_id": 2, "name": "李四1", "sports": "篮球、乒乓球、跑步", fruits: "Apple", introduce: "大家好,我喜欢水果,但是不喜欢吃橘子,因为它太酸了" },
    { "_id": 3, "name": "王五1", "sports": "足球、羽毛球", fruits: "Banana", introduce: "大家好,我喜欢水果,喜欢运动" },
    { "_id": 4, "name": "张三2", "sports": "网球、铅球", fruits: "orange", introduce: "大家好,我喜欢水果与健身" },
    { "_id": 5, "name": "李四2", "sports": "乒乓球", fruits: "Orange, Apple", introduce: "大家好,我喜欢乒乓球运动" },
    { "_id": 6, "name": "王五2", "sports": "篮球", fruits: "Orange, Banana", introduce: "hello,i like sports" },
    { "_id": 7, "name": "张三3", "sports": "跑步、跳绳", fruits: "Orange, apple, Banana", introduce: "haha, 与健身相比,我更喜欢吃" },
    { "_id": 8, "name": "李四3", "sports": "足球", fruits: "orange, banana", introduce: "足球和橘子是我的最爱" },
    { "_id": 9, "name": "王五3", "sports": "跆拳道", fruits: "Banana", introduce: "我不喜欢健身,我喜欢突破自己" }
])

二、文本选择器($text)

语法:

{
  $text:
    {
      $search: <string>,
      $language: <string>,
      $caseSensitive: <boolean>
    }
}

$search:指的是待搜索的文本

$language:可选,指的是语言,默认值是none,使用时可以使用长的语言名称或者ISO 639-1

支持的语言如下:

Language Name

ISO 639-1 (Two letter codes)

danish

da

dutch

nl

english

en

finnish

fi

french

fr

german

de

hungarian

hu

italian

it

norwegian

nb

portuguese

pt

romanian

ro

russian

ru

spanish

es

swedish

sv

turkish

tr

$caseSensitive:指的是区分大小写,默认为false(不区分大小写)

三、例子:检索furits中包含apple的文档

db.studentInfos.find({
    $text: {
        $search: "apple"
    }
})

执行文档查询发现报错了:

Error: error: {
	"ok" : 0,
	"errmsg" : "text index required for $text query",
	"code" : 27,
	"codeName" : "IndexNotFound"
}

报错了,原因是需要在搜索的字段上建立文本索引

下面我们在fruits字段上建立文本索引:

db.studentInfos.createIndex( { fruits: "text" } )

然后再执行查询文档的操作,结果如下:

{ "_id" : 2, "name" : "李四1", "sports" : "篮球、乒乓球、跑步", "fruits" : "Apple", "introduce" : "大家好,我喜欢水果,但是不喜欢吃橘子,因为它太酸了" }
{ "_id" : 5, "name" : "李四2", "sports" : "乒乓球", "fruits" : "Orange, Apple", "introduce" : "大家好,我喜欢乒乓球运动" }
{ "_id" : 1, "name" : "张三1", "sports" : "羽毛球、乒乓球", "fruits" : "apple, banana", "introduce" : "大家好,我喜欢运动,但是我不喜欢铅球,因为它太重了" }
{ "_id" : 7, "name" : "张三3", "sports" : "跑步、跳绳", "fruits" : "Orange, apple, Banana", "introduce" : "haha, 与健身相比,我更喜欢吃" }

发现fruits中带有Apple的也被检索出来,原因是默认情况下是不区分大小写的,如果想区分大小写,可使用下面的查询命令:

db.studentInfos.find({
    $text: {
        $search: "apple",
        $caseSensitive: true
    }
})

查询的结果如下:

{ "_id" : 1, "name" : "张三1", "sports" : "羽毛球、乒乓球", "fruits" : "apple, banana", "introduce" : "大家好,我喜欢运动,但是我不喜欢铅球,因为它太重了" }
{ "_id" : 7, "name" : "张三3", "sports" : "跑步、跳绳", "fruits" : "Orange, apple, Banana", "introduce" : "haha, 与健身相比,我更喜欢吃" }

需要注意的是使用$text进行文本检索时,需要在检索的字段上建立文本索引

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/529226.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IHS安装ssl证书

1、向专业机构申请证书&#xff0c;或者使用openssl生成自签名证书&#xff0c;openssl生成证书参考以下步骤。 openssl生成证书参考https://blog.51cto.com/longlei/2120718 生成加密私钥 [rootlocalhost test]# openssl genrsa -out test.key 2048 Generating RSA private…

直线模组常见故障的解决方法

直线模组因其具有单体运动速度快、重复定位精度高、本体质量轻、占设备空间小、寿命长等特点&#xff0c;运用的范围一直在扩大&#xff0c;发展至今&#xff0c;已经被广泛应用到各种各样的设备当中。 在直线模组的使用过程中&#xff0c;或多或少都会出现一些问题&#xff0c…

DUBBO 3.x 兼容 invoke 调用

从DUBBO的2.7.22版本升级到了3.x的版本后&#xff0c;发现invoke失灵了 首先是启动报错&#xff0c;注释掉配置 dubbo.protocol.telnetinvoke后程序可运行&#xff0c;但是invoke失效。 通过对比源码 示例&#xff1a; tag-3.0.10 tag-2.7.22 发现3.0.2之后的版本都移除了i…

【网络编程】UDP简单实现翻译软件与网络聊天室

文章目录 一、引入二、翻译软件实现2.1 加载字典2.2 处理数据并传递给用户端2.3 客户端获取结果2.4 结果2.5 执行命名功能 三、网络聊天室实现3.1 管理用户3.2 发送消息3.3 多线程处理3.4 结果 四、源码 一、引入 在上一章【网络编程】demo版UDP网络服务器实现实现了客户端和服…

(1分钟了解)视觉惯性导航初始化方法综述

视觉惯性导航初始化方法综述 ​ 编辑切换为居中 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 初始化相关的简介&#xff0c;在这里知道初始化方法可以分为联合初始化、非联合初始化和半联合初始化三种方法即可。 ​ 编辑切换为居中 添加图片注释&…

VIM学习笔记 正则表达式-(vimgrep/grep)

在UNIX问世的前一年&#xff0c;1969年&#xff0c;Ken Thompson将正则表达式整合入QED文本编辑器。在Linux文本编辑器ed中&#xff0c;如果你希望显示包含字母“re”的行时&#xff0c;需要使用命令g/re/p&#xff0c;而grep也因此得名。可以看作此操作的缩写&#xff1a;g (g…

ARM板上的蓝牙对讲功能

1&#xff09;ARMRTL8723 或RTL8821 RTL8723是USB接口的邮票芯片&#xff0c;集成了wifi和BT。前面已经完成了wifi的处理&#xff0c;这次主要说一下蓝牙语音方面。 蓝牙功能&#xff0c;我们主要是使用Bluez5协议栈.结合alsa使用&#xff08;pulseaudio也是可以的&#xff0c…

JVM学习(四)

1. JAVA IO/NIO 1.1. 阻塞 IO 模型 最传统的一种 IO 模型&#xff0c;即在读写数据过程中会发生阻塞现象。当用户线程发出 IO 请求之后&#xff0c;内 核会去查看数据是否就绪&#xff0c;如果没有就绪就会等待数据就绪&#xff0c;而用户线程就会处于阻塞状态&#xff0c…

Class 02 - R语言Rstudio的安装

Class 02 - R语言&Rstudio的安装 下载和安装R安装前准备下载R语言安装R语言开始使用R语言 下载和安装RStudio安装前准备下载RStudio安装RStudio开始使用RStudio如何编写代码 下载和安装R 在这个部分中&#xff0c;你将完成在计算机上下载和安装R语言程序。当安装完成后&am…

嫌视频背景杂乱或单调?如何去除视频杂乱背景

录制视频时&#xff0c;有时候视频背景会十分杂乱或单调&#xff0c;这会对用户的视觉体验和注意力产生负面影响。 背景杂乱或单调的场景可能会影响您的观感。这种情况通常发生在自然光线不足或拍摄环境不理想的情况下。如果您想改变视频的背景或者是去除视频杂乱的背景&#…

硬件I2C读写MPU6050代码

1、接线图 SDA接在B11,SCL接在B10 &#xff0c;软件IIC的两个引脚可以任意更改的&#xff0c;因为都是开漏输出&#xff0c;硬件接在哪个引脚上&#xff0c;程序中就对应操作哪个引脚 但是硬件IIC&#xff0c;通信引脚是不可以任意指定的&#xff0c;查表&#xff0c;由于PB6、…

2023年Android开发者路线-第4部分

2023年Android开发者路线-第1部分 2023年Android开发者路线-第2部分 2023年Android开发者路线-第3部分 2023年Android开发者路线-第4部分 2023年Android开发者路线-第4部分 在上一篇博文中&#xff0c;我们讨论了现代 Android 开发的基本要素&#xff0c;包括 Fragments、…

2023年Android开发者路线-第3部分

2023年Android开发者路线-第1部分 2023年Android开发者路线-第2部分 2023年Android开发者路线-第3部分 2023年Android开发者路线-第4部分 2023年Android开发者路线-第3部分 在上一篇文章中&#xff0c;我们讨论了 Android 主要组件的重要元素&#xff0c;包括 Intents 和 …

【C++初阶】类与对象(中)之你必须掌握的三个重要默认成员函数 --- 构造函数 +析构函数 + 拷贝构造函数

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习C和算法 ✈️专栏&#xff1a;C航路 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&#x1…

chatgptH5源码开发

hatGPTH5源码开发需要以下步骤&#xff1a; 确定需求&#xff1a;在开发ChatGPTH5应用之前&#xff0c;需要明确用户的需求和目标&#xff0c;以便进行合理的设计和开发。 技术选型&#xff1a;选择适合的前端技术框架和工具&#xff0c;如React、Vue、Angular等&#…

Flink从入门到精通之-10容错机制

Flink从入门到精通之-10容错机制 流式数据连续不断地到来&#xff0c;无休无止&#xff1b;所以流处理程序也是持续运行的&#xff0c;并没有一个明确的结束退出时间。机器运行程序&#xff0c;996 起来当然比人要容易得多&#xff0c;不过希望“永远运行”也是不切实际的。因…

WritingGPT: 基于ChatGPT和AutoGPT打造个人写作团队

本文介绍了如何通过定义多个GPT角色&#xff0c;以自动化流水线的方式打造个人写作团队&#xff0c;让AI帮助我们完成文章写作、修改、SEO等所有流程。原文: How I Built WritingGPT, a Fully Automated AI Writing Team ChatGPT是AI内容创造领域的巨大飞跃&#xff0c;但当我们…

8 种「Python 程序」定时执行方式

在日常工作中&#xff0c;我们常常会用到需要周期性执行的任务&#xff0c;一种方式是采用 Linux 系统自带的 crond 结合命令行实现&#xff0c;另外一种方式是直接使用Python。 最近我整理了一下 Python 定时任务的实现方式&#xff0c;建议收藏后学习。 利用while True: sle…

pro如何添加定时任务

Pro v2.4版本开始后台可以开关控制定时任务&#xff0c;那如何添加新的定时任务呢&#xff1f; 第一步&#xff1a;设置定时任务名称及标识&#xff1b; 文件app\controller\admin\v1\system\SystemTimer中task_name()方法 /**定时任务名称及标识 * return mixed */ public fu…

25岁,本科学历,待业,如何成为优秀的数据分析师,值得关注!

25岁&#xff0c;本科学历&#xff0c;待业&#xff0c;如何成为优秀的数据分析师&#xff0c;值得关注&#xff01; 你是在工作几年后确定自己的职业方向的呢&#xff1f;还是一直都是处于迷茫&#xff0c;随波逐流的状态&#xff1f;都说谁的青春不迷茫&#xff0c;但时间是最…