如何添加验证以向我的数据库添加电子邮件? UPSERT?

时间:2015-08-02 01:25:57

标签: mongodb

我正在努力做到最好的方法。

我收到了姓名和电子邮件,我想将其添加到我的收藏中。

但是,如果电子邮件已经存在,那么我不想插入姓名和电子邮件。有没有办法用upsert做到这一点?我试图从文档中理解,但它对我来说有点混乱。 http://docs.mongodb.org/manual/reference/method/db.collection.update/非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

首先,您应该考虑email字段的creating an unique index,以确保只有一个文档适用于任何特定的email

db.collection.createIndex({email: 1}, {unique: true})

您还可以添加sparse选项以允许不包含email的文档。

然后,根据您的特定用例,您将有两个选项:使用upsert,或使用insert忽略重复键错误。

的Upsert

使用以下upsert操作

db.collection.update({email: email}, {$set: {name: name}}, {upsert: true})

你会:

  1. 如果还没有email,则创建新文档;
  2. 如果电子邮件已存在,则使用新name更新现有文档。
  3. 以下是来自MondoDB documentation的引文,解释了当没有文档符合查询条件时的upsert行为:

      

    此更新根据&lt; query&gt; 参数中的等同子句创建基本文档,然后应用&lt; update&gt; 参数中的更新表达式。< / p>

    插入

    如果您不想更新现有文档的name字段,则应使用basic insert operation代替:

    db.u.insert({email: email, name: name})
    

    忽略所有11000 E11000重复键错误。