MongoDB ref原子插入/删除

时间:2016-07-13 13:45:13

标签: java mongodb morphia

我有一个案例,其中我有一份参考文件B的文件A. 这意味着为了引用/删除新创建的文档B,我有两个选择:

  1. 将文件B嵌入文件A
  2. 让应用程序代码首先创建文档B,然后更新文档A
  3. 我知道MongoDB / Morphia不支持原子操作,所以你必须自己管理它。
    对于我的用例,它不是嵌入文档B的选项,它们是独立集合的一部分,应该保持原样。

    所以我离开了选项2.但我想知道管理请求的交易性质的最佳解决方案是什么。
    即如果插入/删除了文档B但是创建/删除对文档A的引用失败,则不应提交它。

    你是否通过在try / catch / finally块中反转操作来回滚?
    这个问题有一个共同的解决方案吗?

    我使用Morphia来实现Dao。

1 个答案:

答案 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:

当然,你可以在试试中同时进行两次保存。这并不能保护您免受保存之间的灾难性应用程序崩溃,但其他方面则足够好。还需要考虑数据库中的竞争条件(例如,对具有唯一索引的字段使用相同值的文档的并发插入)。