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

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

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

谢谢

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

{ type : "FB", unique:"1111111111"}

起初,我考虑将这两个字符串合并为一个,并使用串联作为文档 ID,然后在保存文档时会自动进行更新插入,但如果我错了,感觉就像是错误的方法。

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

感谢您的帮助

最佳答案

正如 Chris 所说,upsert 可能是执行此操作的正确方法。你有一些示例数据吗?这是一个简单的例子:

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

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

关于mongodb - 如果违反唯一索引,Mongo 会更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12376676/

相关文章:

mysql - 如何在 MySQL 中指定复合唯一约束

node.js - .exist 如何在 Mongoose 中工作

javascript - Mongoose $push 不插入数组

python - 如何获取 pandas 数据框中的行,列中有最大值并保留原始索引?

mysql - 检查 MySQL 中两列的唯一约束

mysql - 强制执行唯一列

mongodb - 允许自定义 CRDT 合并的分布式数据库

c - Mongo C驱动: Insert element into nested array

mysql 索引创建问题

mysql - KEY 关键字是什么意思?