参考 > 参考 > mongo Shell方法 > 连接方式 > Session > Session.startTransaction()
Session.
startTransaction
(<选项> )¶版本4.0中的新功能。
启动 与会话关联的多文档事务。在任何给定时间,一个会话最多只能有一个未完成的事务。
可用性
重要
在事务中,您只能在现有集合上指定读写(CRUD)操作。例如,多文档事务不能包含将导致创建新集合的插入操作。
该Session.startTransaction()
方法可以采用以下选项的文档:
选项 | 描述 |
---|---|
readConcern |
可选的。一个文档,它指定事务中所有操作的读取关注点,而不是特定于操作的读取关注点。 您可以指定以下读取关注级别之一: 对于 |
writeConcern |
可选的。指定事务的写关注点的文档。此写问题适用于事务提交和中止操作。 事务中的操作使用,而不是特定于操作的写操作。 如果您使用写关注来提交,则可以在故障转移过程中回滚事务
。 对于MongoDB驱动程序,事务使用客户端级别的写入关注作为默认值。 |
对于多文档交易:
config
,admin
或local
数据库。system.*
集合。explain
)。getMore
在事务内部调用
。getMore
在事务外部调用
。killCursors
的第一个操作。方法 | 命令 | 注意 |
---|---|---|
db.collection.aggregate() |
aggregate |
不包括以下阶段: |
db.collection.countDocuments() |
不包括以下查询运算符表达式: |
|
db.collection.distinct() |
distinct |
在未分片集合中可用。 |
db.collection.find() |
find |
|
geoSearch |
||
delete |
||
findAndModify |
对于upsert ,仅当针对现有集合运行时。 |
|
insert |
仅在针对现有集合运行时。 | |
db.collection.save() |
如果插入,则仅在针对现有集合运行时。 | |
update |
对于upsert ,仅当针对现有集合运行时。 |
|
对于插入操作,仅在针对现有集合运行时。
对于
upsert ,仅当针对现有集合运行时。 |
多文档事务中不允许影响数据库目录的操作,例如创建或删除集合或索引。例如,多文档事务不能包含将导致创建新集合的插入操作。请参阅受限操作。
信息的命令,例如isMaster
,
buildInfo
,connectionStatus
(和他们的辅助方法)被允许在交易; 但是,它们不能是事务中的第一个操作。
考虑一个场景,当对hr
数据库中的员工记录进行更改时,您要确保数据库中的events
集合reporting
与hr
更改保持同步。也就是说,您要确保这些写入操作是作为单个事务完成的,以便两个操作都成功或失败。
数据库中的employees
集合hr
包含以下文档:
数据库中的events
集合reporting
包含以下文档:
以下示例打开一个事务,将员工的状态更新Inactive
为employees
状态,并将相应的文档插入到events
集合中,并将这两项操作作为单个事务提交。