我有一个案例,其中我有一份参考文件B的文件A. 这意味着为了引用/删除新创建的文档B,我有两个选择:
我知道MongoDB / Morphia不支持原子操作,所以你必须自己管理它。
对于我的用例,它不是嵌入文档B的选项,它们是独立集合的一部分,应该保持原样。
所以我离开了选项2.但我想知道管理请求的交易性质的最佳解决方案是什么。
即如果插入/删除了文档B但是创建/删除对文档A的引用失败,则不应提交它。
你是否通过在try / catch / finally块中反转操作来回滚?
这个问题有一个共同的解决方案吗?
我使用Morphia来实现Dao。
答案 0 :(得分:0)
你最好的选择可能就是:
version: '2'
services:
nginx:
image: nginx
ports:
- "80:80"
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
networks:
- shared_internal
redmine:
image: redmine
ports:
- "3000:3000"
networks:
- shared_internal
networks:
shared_internal:
当然,你可以在试试中同时进行两次保存。这并不能保护您免受保存之间的灾难性应用程序崩溃,但其他方面则足够好。还需要考虑数据库中的竞争条件(例如,对具有唯一索引的字段使用相同值的文档的并发插入)。