无法在多文档事务中创建命名空间(MongoDB 4.0、Spring Data 2.1.0、Spring Boot)
Posted
技术标签:
【中文标题】无法在多文档事务中创建命名空间(MongoDB 4.0、Spring Data 2.1.0、Spring Boot)【英文标题】:Cannot create namespace in multi-document transaction(MongoDB 4.0, Spring Data 2.1.0, Spring Boot) 【发布时间】:2019-03-06 05:52:34 【问题描述】:这个问题是关于 Spring boot, Mongo4.0, Spring-data application.
我已从 MongoDB 3.6.x 升级到 MongoDB 4.0,并将 Spring data 2.0.x 升级到 Spring-data 2.1.0,以便在将数据插入多个文档时进行事务管理。但是在这里,我在创建数据库、集合并将文档插入集合时遇到了这个问题。
问题
Cannot create namespace sampledb_200.demo in multi-document transaction
这里 sampldb_200 是数据库名称,demo 是集合名称。
在早期的 mongodb3.6.X 版本,Spring Data 2.0.x 中,即使数据库和集合不存在,我也能够同时进行数据库、集合创建、文档插入。
使用 Spring Data 2.1.0、MongoDB 4.0,数据库、集合创建和插入不会发生在一个函数和数据库下,集合创建要显式完成。
【问题讨论】:
你的问题是什么? 【参考方案1】:Spring 正在采用 MongoDB 4.0 附带的一项新功能,该功能支持多文档事务。该功能仅适用于现有集合,即多文档事务不能包含会导致创建新集合的插入操作。您应该事先创建您的收藏以使用此功能。
【讨论】:
【参考方案2】:因此,如果您使用猫鼬事务startTransaction
并在保存一些新文档后使用.save(sessions)
,请确保您已为该文档创建了正确的集合。
因为,在这种情况下,Mongo 不会自动创建新集合。 检查会话选项https://mongoosejs.com/docs/api.html#model_Model-save
【讨论】:
【参考方案3】:在模态类的顶部使用此注释
@org.springframework.data.mongodb.core.mapping.Document("DEMO")
【讨论】:
以上是关于无法在多文档事务中创建命名空间(MongoDB 4.0、Spring Data 2.1.0、Spring Boot)的主要内容,如果未能解决你的问题,请参考以下文章
无法在WPF中创建继承的usercontrol,本地命名空间中的基本控件“不存在”
无法在 Kubernetes 集群中执行 GitLab Runner:无法在命名空间“gitlab”中的 API 组“”中创建资源“秘密”