我有多个发布/订阅服务器,它们尝试在事件发生时更新 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"
}
有没有人能够成功地在文档中自动添加/修改数组条目,而不必将数组数据完全移出集合?我知道通过将其移出集合,它允许我针对条目建立一个独特的约束,但我宁愿不必这样做。