Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB Javascript批插入唯一约束_Javascript_Mongodb - Fatal编程技术网

MongoDB Javascript批插入唯一约束

MongoDB Javascript批插入唯一约束,javascript,mongodb,Javascript,Mongodb,对于MongoDB原生JS驱动程序和给定唯一约束的插入,我有点困惑。阅读这里,似乎在插入之后,可以传递一个成功回调,该回调可以处理保存的文档,例如,从保存的文档中获取_id字段 但是,假设我正在保存用户配置文件,每个配置文件都有一个电子邮件字段。我希望电子邮件字段是唯一的,所以我想我必须使用ensureIndex。然后假设我想批量插入10个用户配置文件,每个配置文件都有一个电子邮件字段,但这10封电子邮件中有2封已经存在于我的数据库中。由于唯一的限制,这两个用户配置文件不会被添加到数据库中,对吗

对于MongoDB原生JS驱动程序和给定唯一约束的插入,我有点困惑。阅读这里,似乎在插入之后,可以传递一个成功回调,该回调可以处理保存的文档,例如,从保存的文档中获取_id字段

但是,假设我正在保存用户配置文件,每个配置文件都有一个电子邮件字段。我希望电子邮件字段是唯一的,所以我想我必须使用ensureIndex。然后假设我想批量插入10个用户配置文件,每个配置文件都有一个电子邮件字段,但这10封电子邮件中有2封已经存在于我的数据库中。由于唯一的限制,这两个用户配置文件不会被添加到数据库中,对吗?那么回调中会返回什么?8保存的文档?或8份保存的文档和2份预先存在的文档

编辑: 经过一点测试,我已经取得了一些好的进展,但我仍然缺少一块。我将从上面继续解释我的示例。假设我有一个包含1个文档的用户配置文件集合,该文档有一个包含电子邮件的字段:ex@mple.com. 然后假设我在这个集合的email字段上放置了一个带有{unique:true}的索引。如果我随后执行一个简单的插入:

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