MongoDB索引用于优化查询和排序操作,保证查询效率。索引存储在集合中,以一定的排序存储集合中的一些字段,使用这些字段的值快速查找和排序集合中的文档。
在MongoDB中,使用db.collection.createIndex()命令创建索引。语法如下:
db.collection.createIndex(keys, options)
- keys: 要创建索引的字段。1表示升序创建索引,-1表示降序。
- options: 可选参数,控制索引的创建选项,比如名字、唯一性约束等。
例如:
# 升序创建name字段索引
db.users.createIndex({name: 1})
# 联合索引,先按age升序,再按name降序
db.users.createIndex({age: 1, name: -1})
# 创建唯一索引
db.users.createIndex({email: 1}, {unique: true})
在MongoDB 4.2版本以前,只支持单文档事务,使用两个阶段提交(two-phase commit,2PC)实现。
从MongoDB 4.2开始,WiredTiger存储引擎支持多文档事务和two-phase commit(2PC)。
语法如下:
开始事务:
session.startTransaction()
提交事务:
session.commitTransaction()
回滚事务:
session.abortTransaction()
示例:
const session = db.getMongo().startSession()
session.startTransaction()
db.users.updateOne({name: "John"}, {$inc: {age: 1}}, {session})
db.logs.insertOne({name: "transaction_log"}, {session})
if (canCommit) {
session.commitTransaction()
} else {
session.abortTransaction()
}