我正在努力做到最好的方法。
我收到了姓名和电子邮件,我想将其添加到我的收藏中。
但是,如果电子邮件已经存在,那么我不想插入姓名和电子邮件。有没有办法用upsert做到这一点?我试图从文档中理解,但它对我来说有点混乱。 http://docs.mongodb.org/manual/reference/method/db.collection.update/非常感谢任何帮助。
答案 0 :(得分:0)
首先,您应该考虑email
字段的creating an unique index,以确保只有一个文档适用于任何特定的email
:
db.collection.createIndex({email: 1}, {unique: true})
您还可以添加sparse
选项以允许不包含email
的文档。
然后,根据您的特定用例,您将有两个选项:使用upsert,或使用insert忽略重复键错误。
使用以下upsert操作
db.collection.update({email: email}, {$set: {name: name}}, {upsert: true})
你会:
email
,则创建新文档; name
更新现有文档。以下是来自MondoDB documentation的引文,解释了当没有文档符合查询条件时的upsert行为:
此更新根据&lt; query&gt; 参数中的等同子句创建基本文档,然后应用&lt; update&gt; 参数中的更新表达式。< / p>
如果您不想更新现有文档的name
字段,则应使用basic insert
operation代替:
db.u.insert({email: email, name: name})
忽略所有11000 E11000
重复键错误。