- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
如果已经存在具有相同姓名和姓氏的人,如何防止多个 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/
是否有用于手动测试的代码覆盖工具?比如我新写了30行代码,编译,然后运行,有什么办法可以快速验证这30行都运行了吗? 另外,后来,在我将代码 checkin 正式版本后,有什么方法可以验证测试部门在进
老实说,这是一个家庭作业问题,但我已经浪费了好几个小时,而且无法正确解决。它返回错误数量的结果或错误的数据: 我需要选择参与指导电影和/或在电影中表演的每个人以及他们所做的次数,如果至少 5 次。 有
我正在尝试测试 MacOS 的应用内购买。输入测试用户凭据后,App Store 提示:“当前收据无效或 ds 人员 ID 不匹配。”并且购买失败。 最佳答案 我尝试了很多方法来解决这个问题。 Get
我正在为 Jenkins 使用 ActiveDirectory 插件,因此用户必须使用他们的凭据登录到 Jenkins。然后用户在 Jenkins 中被称为 joe.doe,这很完美。 当同一个人 c
如何从 Infopath 人员/组选取器检索电子邮件地址?当我将人员/组选取器添加到 infopath 表单时,我只得到 3 个字段 DisplayName、AccountId、AccountType
在 Snow Leopard 中,可以在 iCal 事件中显示空闲/忙碌时间。我搜索了 CalStore.framework 的 header ,但找不到任何描述该字段的属性。如何检索日历事件的忙/闲
是否有人成功地从专门针对 SharePoint 2013 的新建或编辑表单中获取用户(个人或组)字段的值? 我已经尝试了通过搜索互联网找到的所有解决方案以及我自己能想到的所有解决方案,所有结果都为空白
所以我需要将一个 Twitter 帐户添加到 ABRecordRef 中。然而,最快的方法似乎是获取社交资料属性的多值引用,创建它的可变版本,查找它是否有 Twitter 条目,如果已经有,则创建
我正在尝试将使用 Tomcat(最初是 5.5,但可以与 7 一起使用)在 MyEclipse 中开发的应用程序部署到我们的演示服务器 (Sun Java Web Server 7)。不幸的是,所有设
我是一名优秀的程序员,十分优秀!