如果违反了唯一索引,Mongo会更新

时间:2012-09-11 19:34:16

标签: mongodb indexing unique-constraint insert-update spring-data

我想知道是否有一种方法(配置/操作),它允许更新(从插入的记录中添加新数据,如save())数据库中的现有文档,同时尝试插入违反唯一的其他文档索引..?

由于

我有SocialProfile文档,它代表与特定社交网络相关的域用户配置文件。
我想在该网络中使用社交网络类型+用户唯一的组合作为唯一。

{type:“FB”,unique:“1111111111”}

起初我考虑将这两个字符串合并为一个并使用连接作为文档ID,然后在保存文档时自动发生upsert,但如果我错了,感觉错误的方法是正确的。

更有意义的是将这些属性定义为复合唯一索引。
我希望能够根据该索引执行这些文档的upsert ..
我正在使用Spring Data框架,我如何支持这种操作以及特定的spring数据。

谢谢你的帮助

1 个答案:

答案 0 :(得分:3)

正如克里斯所说,upsert可能是正确的方法。你有一些示例数据吗?这是一个简单的例子:

db.coll.update(
  /* query */ {keys:"from", unique:"index"}, 
  /* new document */ {keys:"from", unique:"index", new_value:"foo"}, 
  /* upsert */ true, 
  /* multi */ false);

它将查询包含查询中指定的键的文档,如果存在,它将使用提供的文档更新该文档。如果该文档不存在,它将创建一个新文档。