0

我有多个发布/订阅服务器,它们尝试在事件发生时更新 MongoDB 数据库。目前,我遇到了一个问题,我需要将条目自动添加到给定的 MongoDB 文档数组中,但是当涉及到谁将条目添加到文档中时,我遇到了竞争条件。我试图用它$addToSet来完成添加。但是,由于一旦条目在数组内,数组条目就可以更新,因此 addToSet 很难正常工作,因为它会直接比较条目是否在数组内。如下所示的最终结果是我让多个服务器在阵列中添加了一个新条目。

以下是我想要的已完成文档的示例:

{
    "_id" : ObjectId("522f99a622927d6d65b81dbd"),
    "array" : [
        {
            "type" : "out",
            "uuid" : "4f501517-1d10-48c2-91b7-0ca1bda80bd5",
            "member_id" : "3847",
            "join" : ISODate("2013-09-10T17:13:58.881Z")
        }
    ],
    "created" : ISODate("2013-09-10T17:13:58.437Z"),
    "name" : "entry"
}

以下是由于竞态条件而发生的情况的示例:

{
    "_id" : ObjectId("522f99a622927d6d65b81dbd"),
    "array" : [
        {
            "type" : "out",
            "uuid" : "4f501517-1d10-48c2-91b7-0ca1bda80bd5",
            "member_id" : "3847",
            "join" : ISODate("2013-09-10T17:13:58.881Z")
        },
        {
            "type" : "out",
            "uuid" : "4f501517-1d10-48c2-91b7-0ca1bda80bd5",
            "member_id" : "3847",
            "join" : ISODate("2013-09-10T17:13:58.881Z")
        }
    ],
    "created" : ISODate("2013-09-10T17:13:58.437Z"),
    "name" : "entry"
}

有没有人能够成功地在文档中自动添加/修改数组条目,而不必将数组数据完全移出集合?我知道通过将其移出集合,它允许我针对条目建立一个独特的约束,但我宁愿不必这样做。

4

1 回答 1

0

不幸的是,您需要将数组移动到它自己的集合中以对 uuid 强制执行唯一约束,这将导致具有相同 uuid 的插入失败。有一个提供该功能的功能请求,您可以在以下位置查看:https ://jira.mongodb.org/browse/SERVER-1068 。

让我知道我是否可以帮助您解决其他问题。

最好的,查理

于 2013-09-13T18:44:17.633 回答