5.关于MongoDB的索引和运算符

img

关于索引和运算符

索引

MySQL 和 MongoDB 使用不同的语法和命令来创建索引。MySQL 使用标准的 SQL 语句,而 MongoDB 使用其特有的 shell 语法。下面我将为 MySQL 和 MongoDB 分别展示如何创建索引的示例。

MySQL 创建索引的 SQL 语句

在 MySQL 中,你可以使用 CREATE INDEX 语句或 ALTER TABLE 语句来创建索引。

使用 CREATE INDEX 语句

CREATE INDEX index_name ON table_name (column1, column2, ...);

例如,为 users 表的 email 列创建一个名为 idx_email 的索引:

CREATE INDEX idx_email ON users (email);

使用 ALTER TABLE 语句

ALTER TABLE table_name ADD INDEX index_name (column1, column2, ...);

例如,同样为 users 表的 email 列创建一个名为 idx_email 的索引:

ALTER TABLE users ADD INDEX idx_email (email);

你还可以创建唯一索引,以确保索引列中的值是唯一的:

CREATE UNIQUE INDEX unique_index_name ON table_name (column1, column2, ...);

或者使用 ALTER TABLE:

ALTER TABLE table_name ADD UNIQUE INDEX unique_index_name (column1, column2, ...);

MongoDB 创建索引

在 MongoDB 中,你使用 createIndex() 方法来创建索引。这是在 MongoDB shell 中执行的。

db.collection.createIndex(
   { field1: 1, field2: -1 },
   { unique: true, sparse: true }
)

例如,为 users 集合的 email 字段创建一个唯一索引:

db.users.createIndex(
   { email: 1 },
   { unique: true }
)

上面的例子中,{ email: 1 } 定义了索引的字段和排序方向(1 表示升序,-1 表示降序)。{ unique: true } 选项指定了这是一个唯一索引。

你还可以创建复合索引,即在多个字段上创建索引:

db.users.createIndex(
   { firstName: 1, lastName: 1 }
)

此外,MongoDB 还支持地理空间索引、文本索引、哈希索引等。创建这些索引的语法和选项会有所不同。

总之,MySQL 和 MongoDB 在创建索引时使用了不同的语法和命令,但它们的目的都是为了提高查询性能。在实际应用中,你应该根据数据库的类型和查询需求来选择合适的索引类型。

关于createIndex

关于mongodb的中文手册里面写了的很清楚了,大家可以在里面找到对应的方法,内的具体参数,比如db.collection.createIndex(keys,options) options选项:

ParameterTypeDescription
backgroundBoolean建索引过程会阻塞其它数据库操作,background可指定以后台方式创建索引,即增加"background" 可选参数。 “background” 默认值为false
uniqueBoolean建立的索引是否唯一。指定为true创建唯一索引。默认值为false.
namestring索引的名称。如果未指定,MongoDB的通过连接索引的字段名和排序顺序生成一个索引名称。
partialFilterExpressiondocument如果指定,则索引仅引用与过滤器表达式匹配的文档
sparseBoolean对文档中不存在的字段数据不启用索引;这个参数需要特别注意,如果设置为true的话,在索引字段中不会查询出不包含对应字段的文档.。默认值为 false.
expireAfterSecondsinteger指定一个以秒为单位的数值,完成 TTL设定,设定集合的生存时间。
storageEnginedocument存储引擎,允许用户在创建索引时基于每个索引配置存储引擎。

索引相关指令

// 清除指定
db.collection.dropIndex(index)
// 清除全部
db.collection.dropIndexes()
// 查看索引
db.collection.getIndexes()
//查看索引大小
db.collection.totalIndexSize()

运算符

以下截自中文操作手册,并且里面写上了详细的案例,点击可以跳转,可能有些是机器翻译的,表达不是很清楚!!

1 比较

名称描述
$eq匹配等于指定值的值。
$gt匹配大于指定值的值。
$gte匹配大于或等于指定值的值。
$in匹配数组中指定的任何值。
$lt匹配小于指定值的值。
$lte匹配小于或等于指定值的值。
$ne匹配所有不等于指定值的值。
$nin不匹配数组中指定的任何值。

2 逻辑

名称描述
$and用逻辑联接查询子句AND将返回两个子句都匹配的所有文档。
$not反转查询表达式的效果,并返回与查询表达式匹配的文档。
$nor用逻辑联接查询子句NOR将返回两个子句均不匹配的所有文档。
$or用逻辑联接查询子句OR将返回符合任一子句条件的所有文档。

3 元素

名称描述
$exists匹配具有指定字段的文档。
$type如果字段是指定类型,则选择文档。

4 评估

名称描述
$expr允许在查询语言中使用聚合表达式。
$jsonSchema根据给定的JSON Schema验证文档。
$mod对字段的值执行模运算并选择具有指定结果的文档。
$regex选择值与指定的正则表达式匹配的文档。
$text执行文本搜索。
$where匹配满足JavaScript表达式的文档。

5 地理空间

名称描述
$geoIntersects选择与GeoJSON几何形状相交的几何形状。该2dsphere索引支持 $geoIntersects
$geoWithin选择边界GeoJSON几何内的几何。该2dsphere2D指标支持 $geoWithin
$near返回点附近的地理空间对象。需要地理空间索引。该2dsphere2D指标支持 $near
$nearSphere返回球体上某个点附近的地理空间对象。需要地理空间索引。该2dsphere2D指标支持 $nearSphere

6 数组

名称描述
$all匹配包含查询中指定的所有元素的数组。
$elemMatch如果array字段中的元素符合所有指定$elemMatch条件,则选择文档。
$size如果数组字段为指定大小,则选择文档。

7 按位

名称描述
$bitsAllClear匹配其中一组位位置的数值或二进制值具有值0
$bitsAllSet匹配其中一组位位置的数值或二进制值具有值1
$bitsAnyClear匹配数字或二进制值,其中一组位位置中的任何位的值为0
$bitsAnySet匹配数字或二进制值,其中一组位位置中的任何位的值为1

8 注释

名称描述
$comment向查询谓词添加注释。

9 投影

名称描述
$在与查询条件匹配的数组中投影第一个元素。
$elemMatch投影与指定$elemMatch条件匹配的数组中的第一个元素。
$meta投影$text操作期间分配的文档分数。
$slice限制从数组投影的元素数量。支持跳过和限制切片。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值