MongoDB Javascript批插入唯一约束
对于MongoDB原生JS驱动程序和给定唯一约束的插入,我有点困惑。阅读这里,似乎在插入之后,可以传递一个成功回调,该回调可以处理保存的文档,例如,从保存的文档中获取_id字段 但是,假设我正在保存用户配置文件,每个配置文件都有一个电子邮件字段。我希望电子邮件字段是唯一的,所以我想我必须使用ensureIndex。然后假设我想批量插入10个用户配置文件,每个配置文件都有一个电子邮件字段,但这10封电子邮件中有2封已经存在于我的数据库中。由于唯一的限制,这两个用户配置文件不会被添加到数据库中,对吗?那么回调中会返回什么?8保存的文档?或8份保存的文档和2份预先存在的文档 编辑: 经过一点测试,我已经取得了一些好的进展,但我仍然缺少一块。我将从上面继续解释我的示例。假设我有一个包含1个文档的用户配置文件集合,该文档有一个包含电子邮件的字段:ex@mple.com. 然后假设我在这个集合的email字段上放置了一个带有{unique:true}的索引。如果我随后执行一个简单的插入:MongoDB Javascript批插入唯一约束,javascript,mongodb,Javascript,Mongodb,对于MongoDB原生JS驱动程序和给定唯一约束的插入,我有点困惑。阅读这里,似乎在插入之后,可以传递一个成功回调,该回调可以处理保存的文档,例如,从保存的文档中获取_id字段 但是,假设我正在保存用户配置文件,每个配置文件都有一个电子邮件字段。我希望电子邮件字段是唯一的,所以我想我必须使用ensureIndex。然后假设我想批量插入10个用户配置文件,每个配置文件都有一个电子邮件字段,但这10封电子邮件中有2封已经存在于我的数据库中。由于唯一的限制,这两个用户配置文件不会被添加到数据库中,对吗
collection.insert({ 'email': 'ex@mple.com' }, { safe: true }, function (err, results) {
console.log(results);
});
上面回调中的结果返回时未定义,因为包含该电子邮件的文档已经存在,因此未执行插入。这很有道理,但我希望返回的结果包含已经存在的文档,这阻止了新的插入。可能吗
> db.collection.find()
{ "_id" : 1, email : "email" }
> db.collection.ensureIndex({email: 1}, {unique: true})
> db.collection.insert({_id:2, email: "email"})
E11000 duplicate key error index: foo.collection.$email_1 dup key: { : "email" }
您能解析重复密钥错误消息吗,E11000重复密钥。。。获取电子邮件并随后发布查找以获取阻止插入的预先存在的文档
因为只有一个文档-db.collection.findemail:email