【问题标题】:MongoDB Javascript Batch Insert Unique ConstraintMongoDB Javascript批量插入唯一约束
【发布时间】:2012-09-17 05:20:15
【问题描述】:

我对 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);                                                         
});

上面的回调结果返回未定义,因为包含该电子邮件的文档已经存在,因此没有执行插入。这很有意义,但我希望“结果”返回包含已经存在的文档,从而阻止新的插入。这可能吗?

【问题讨论】:

    标签: javascript mongodb


    【解决方案1】:
    > 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 重复键...”以获取“电子邮件”并随后发出 find() 以获取阻止插入的预先存在的文档?

    因为只有一个文档- db.collection.find(email: "email")

    【讨论】:

      猜你喜欢
      • 2013-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-05
      • 2012-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多