gpt4 book ai didi

mongodb - 如果已经存在具有相同姓名和姓氏的人,如何防止多个 goroutines 在人员集合中插入文档?

转载 作者:IT王子 更新时间:2023-10-29 02:34:03 26 4
gpt4 key购买 nike

如果已经存在具有相同姓名和姓氏的人,如何防止多个 goroutine 将文档插入人员集合?

type Person struct {

Id bson.ObjectId `bson:"_id"`
Name string `bson:"name"`
LastName string `bson:"lastName"`

}

我正在使用 Mongo 和用于 go 语言的 mgo 驱动程序。

我尝试在插入之前查找是否存在具有相同名称和姓氏的文档,但我认为当两个 goroutines 同时 checkin 时,这并不能涵盖整个情况。我尝试通过两个字段 (name, lastName) 确保索引,但它也没有帮助。

最佳答案

How to prevent to multiple goroutines/process/thread/applications/... to insert documents in persons collections if already exists person with same name and last name

唯一的方法 防止重复条目尤其是。在并发环境中是通过使用 unique index{name:1, lastname:1} 上。然后在您的代码中,您应该准备好优雅地处理潜在冲突引发的异常。

从不永远插入前检查,因为在 MongoDB 中您没有事务,所以很可能其他客户端同时插入了一条记录在您的检查之后和您的插入之前。


其他人肯定可以通过正确的 Go 语法为您提供更多帮助,但按照以下代码行(借自 here)的内容将允许您创建所需的索引:

index := mgo.Index{
Key: []string{"name", "lastName"},
Unique: true,
}

err = c.EnsureIndex(index)

然后,每次插入文档时,都需要使用mgo.isDup函数来测试错误是否由重复键引起。作为先前 answer by @elithrar 的示例:

err := users.Insert(user) // where user is type *mgo.Collection
if err != nil {
if mgo.IsDup(err) {
// Is a duplicate key, but we don't know which one
}
// Is another error
}

关于mongodb - 如果已经存在具有相同姓名和姓氏的人,如何防止多个 goroutines 在人员集合中插入文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30434742/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com