我对 MongoDB 本机 JS 驱动程序和给定唯一约束的插入有点困惑。在这里阅读http://mongodb.github.com/node-mongodb-native/api-articles/nodekoarticle1.html,似乎在插入之后,可以传递一个“成功”回调来处理保存的文档(也许例如,从保存的文档中获取 _id 字段)。
但是,假设我正在保存用户配置文件,每个配置文件都有一个电子邮件字段。我希望电子邮件字段是唯一的,所以我认为我必须使用 ensureIndex。然后假设我想批量插入 10 个用户配置文件,每个配置文件都有一个电子邮件字段,但是这 10 封电子邮件中有 2 封已经存在于我的数据库中。那么通过唯一约束,这两个用户配置文件不会被添加到数据库中,对吧?那么回调中返回了什么?8 保存的文件?还是 8 个已保存的文档和 2 个预先存在的文档?
编辑:经过一些测试,我取得了一些不错的进展,但我仍然缺少一件。我将解释从上面继续我的例子。假设我有一组包含 1 个文档的用户配置文件,并且该文档有一个带有“email”的字段:“ex@mple.com”。然后假设我在此集合中的电子邮件字段上放置了一个带有 { unique: true } 的索引。如果我然后执行一个简单的插入:
collection.insert({ 'email': 'ex@mple.com' }, { safe: true }, function (err, results) {
console.log(results);
});
导致上面的回调返回未定义,因为包含该电子邮件的文档已经存在,因此没有执行插入。这很有意义,但我希望“结果”返回包含已经存在的文档,从而阻止新的插入。那可能吗?