【MongoDB】索引 - 数组字段的多键索引

数组字段创建索引时,MongoDB会为数组中的每个元素创建索引键(多键索引),多键索引支持数组字段的高效查询。

一、准备工作

这里准备一些数据

bash 复制代码
db.shop.insertMany([
    {_id: 1, name: "水果店1", fruits: ["apple", "orange"]},
    {_id: 2, name: "水果店2", fruits: ["banana", "apple"]},
    {_id: 3, name: "水果店3", fruits: ["apple", "banana", "orange"]}
]);

二、创建索引

1、创建索引

bash 复制代码
db.shop.createIndex({ fruits: 1 });

上面创建了fruits字段的复合索引,其中1代表的是正序排序,-1代表的是倒序排序

2、查询索引

bash 复制代码
db.shop.getIndexes();

结果如下:

可以看到多了一个名称为fruits_1的索引

三、示例1:匹配一个

1、执行查询

bash 复制代码
db.shop.find({ fruits: 'banana' });

结果如下:

2、执行过程

bash 复制代码
db.shop.find({ fruits: 'banana' }).explain();

结果如下:

可以看到查询过程中会使用到索引名称为fruits _1的索引

四、示例2:匹配全部

1、执行查询

bash 复制代码
db.shop.find({ fruits: ['apple', 'orange'] });

结果如下:

2、执行过程

bash 复制代码
db.shop.find({ fruits: ['apple', 'orange'] }).explain();

结果如下:

可以看到查询过程中会使用到索引名称为fruits _1的索引

相关推荐
sunshine8851 天前
财务RPA的深水区应用:超越自动化,迈向智能决策支持
数据库
efir OONA1 天前
MySQL数据库误删恢复_mysql 数据 误删
数据库·mysql·adb
zhangchaoxies1 天前
如何在 Go 中安全复制接口指针所指向的值
jvm·数据库·python
陈陈CHENCHEN1 天前
【数据库】MySQL 8.0.40 至 8.0.44 RPM 方式升级指南
数据库·mysql
m0_734949791 天前
怎么利用Navicat进行调整备份文件压缩等级_详细配置与操作步骤
jvm·数据库·python
T.i.s1 天前
番外续2-MIT-BIH Arrhythmia Database
数据库
有味道的男人1 天前
AI 效率翻倍:对接 1688 拍立淘接口,商品全量信息一键抓取
数据库
m0_741173331 天前
如何处理SQL中的NULL值_使用ISNULL或COALESCE函数
jvm·数据库·python
志栋智能1 天前
超自动化巡检:解锁运维数据的深层价值
运维·服务器·数据库·自动化
m0_380113841 天前
补单系统搭建及源码分享
数据库·spring boot·mybatis