仅当某些属性与当前文档不匹配时才插入文档(通过upsert?)

时间:2012-10-15 12:21:18

标签: mongodb

是否有一种插入MongoDB中不包含某些属性的新文档的方法?

例如,假设我要插入一个类似于:

的文档
{
    'f_name': 'Jim',
    'l_name': 'Jones',
    'age': 21,
    'country': 'UK',
    ...etc...
}

但我想仅在包含

的文档时插入此文档
{
    'f_name': 'Jim',
    'l_name': 'Jones'
}

尚未存在。有没有办法在单个操作中执行此操作(例如像upsert,但不修改任何现有匹配文档,如果存在),或者这是否必须在两个单独的操作中完成(查找是否存在,然后查找插入)?

这并不重要,但了解并节省大量时间会非常有用!

1 个答案:

答案 0 :(得分:1)

您可以使用以下两个选项之一:

  • 复合唯一索引
  • 像这样的upsert:

    db.col.update({f_name:'Jim',l_name:'Jones'},{//您的doc在这里},{upsert:true})

这将基本上搜索一个文档,其中这些字段已经具有这些值和更新(您可以只更新具有相同值的字段),或者如果查找条件没有返回结果则插入。

最后一个尝试是使用两个查询,但上面的upsert应该可以很好地工作。