无法在多文档事务中创建命名空间(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)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中创建具有命名空间的文档

如何在 C# 中创建具有命名空间的文档

无法在WPF中创建继承的usercontrol,本地命名空间中的基本控件“不存在”

无法在 Kubernetes 集群中执行 GitLab Runner:无法在命名空间“gitlab”中的 API 组“”中创建资源“秘密”

无法在新的CCW独立安装中创建Clojure项目或命名空间

如何在 mongodb 中创建这种命名对象的结构?