mongodb update 建立了唯一索引还是能被更新

2017-05-17 14:50:19 +08:00
 SlipStupig
数据结构:
{"user": 1, "pwd": "1234"}
我想更新 pwd 字段但是 pwd 字段不能和上一次相同, 于是我建立了唯一索引给 pwd 但是同样的还是可以更新一模一样的数据, 有什么好的解决办法不写入新的字段又能更新
2617 次点击
所在节点    程序员
3 条回复
windfarer
2017-05-17 15:42:18 +08:00
唯一索引的意思是你不能再插入那个字段相同的条目了,而不是不能更新原有的条目
hl
2017-05-17 18:54:42 +08:00
官方解释唯一索引的含义是这样的:
Unique Index
A unique index ensures that the indexed fields do not store duplicate values; i.e. enforces uniqueness for the indexed fields. By default, MongoDB creates a unique index on the _id field during the creation of a collection.

你的做法带来的效果是:
你对 pwd 字段做唯一索引,起到的作用是你插入的所有的记录中的 pwd 字段不能有重复

你的需求:
我默认你的 update 操作不是在通过命令行进行的试验,而是一个业务需求,这不是一个数据库级别的方案。
或许你在以前的关系型数据库比如 oracle,mysql,可能通过触发器之类的能实现的了。
但 mongodb 是个文档 nosql 数据库,是个 kv 的松散结构,你想要做到 pwd 字段 update 新的值进去不能和以前的值是一样的,这纯属“唯一索引”概念不清楚。

你需要的方案是:
通过书写一段逻辑代码,在 update pwd 字段时,对比库里的值和接收过来的值是否相同,不相同则进行更新,相同则返回给调用方 pwd 值不能与以前的一样。
SlipStupig
2017-05-17 19:15:39 +08:00
@hl
@windfarer
感谢二位耐心解答

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/361956

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX