mongodb 索引唯一性约束

mongodb 索引唯一性约束,第1张

创建索引时,制定unique=true可以将其声明为唯一索引,以book为例:

注意

1) 不支持一个复合索引同时出现多个数组字段

2) 唯一性索引对于文档中缺失的字段,会使用null值代替,因此不允许存在多个文档确实索引字段的情况(mysql可以插入多条null,唯一性对此没有约束,因为MySQL将NULL值视为不同的值)。

3)对于分片集合,unique不能保证字段的唯一性,因为插入和索引 *** 作对于每个分片都是本地 *** 作。

MongoDB does not support creating new unique indexes in sharded collections and will not allow you to shard collections with unique indexes on fields other than the _id field.

这种情况有三种方法保证唯一字段的唯一性:

1)使用片键。

2)使用第二个集合保证唯一性。

3)使用本身便能保证唯一性的标识符。如ObjectId。

开启一个集合的分片,之后mongo就可以在分片间分配这个集合的数据。如下,在test.users 分片集合,email有唯一约束。

注意

1)单子段片键唯一性可以保证

2)复合片键只有document包含全部片键字段才能保证唯一性(与单库复合索引不同)

3)对 哈希索引 不能有唯一性约束.

创建另一个只包含唯一字段的不分片的集合,每次在写入主集合之前先将唯一字段的数据试图写入这个集合,若写入失败,则表示有冲突.

如果你的数据量比较小,可以不使用分片,就可以创建多个唯一索引了.

注意

1)你的应用必须能够捕获插入代理集合时产生的错误,并保证两个集合之前的一致性.

2)如果代理集合需要分片,必须使用你想要保证唯一性的字段做片键.

3)在对代理集合使用分片的情况下,如果想要保证多个字段的唯一性.必须对 每个保证唯一性的字段 都创建一个代理集合.如果使用一个代理集合用来确保多个字段的唯一性,这个代理集合 不能够 进行分片.

保证唯一性最好的方法是创建自身可以保证唯一性的标识符(UUID),比如MongoDB的 ObjectId 值.

完结撒花

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11758180.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存