Mongodb 唯一索引

Posted jiahaijiao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mongodb 唯一索引相关的知识,希望对你有一定的参考价值。

1、在更新mongodb文档字段时出现了索引为空值的提示

1.2、查看集合索引:
> db.test2.getIndexes() //查看集合索引
[
    
        "v" : 2,
        "key" : 
            "_id" : 1
        ,
        "name" : "_id_",
        "ns" : "jia_test.test2"
    ,
    
        "v" : 2,
        "unique" : true,     //唯一索引
        "key" :  
            "cr_user" : 1
        ,
        "name" : "cr_user_1",
        "ns" : "jia_test.test2"
    
]
1.3、看了官方文档是这么说的: 感兴趣的可以点击文字查看官方文档

++如果一个文档在唯一索引中没有索引字段的值,那么该索引将为这个文档存储一个空值。由于唯一约束,MongoDB只允许一个缺少索引字段的文档。如果有多个文档没有索引字段的值或缺少索引字段,那么索引构建将会由于重复键错误而失败.++
操作:删除掉没有唯一索引字段的文档,更新成功。

> db.test2.remove("us_amount" : NumberLong(104857600))
WriteResult( "nRemoved" : 1 )
> db.test2.update("cr_user":"0d69c51de9ea464da4b3aff397fa3d0a", "us_amount": NumberLong(104857600));
WriteResult( "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 )

2、唯一索引:

可以在单一字段创建,创建唯一索引命令 ​​db.collection.createIndex()​​ 将​​unique 设置为true​​

唯一索引允许将以下文档插入到集合中,

db.collection.insertMany( [
    _id: 2, a: [  loc: "A" ,  qty: 5  ] ,
    _id: 3, a: [  loc: "A", qty: 10  ] 
] )

因为该索引对a.loc和a.qty值的组合强制唯一性,所以下列数据插入是成功的


> db.collection.createIndex(  "a.loc": 1, "a.qty": 1 ,  unique: true  )

    "createdCollectionAutomatically" : true,
    "numIndexesBefore" : 1,
    "numIndexesAfter" : 2,
    "ok" : 1

> db.collection.insertMany( [
     _id: 2, a: [  loc: "A" ,  qty: 5  ] ,
     _id: 3, a: [  loc: "A", qty: 10  ] 
] )
 "acknowledged" : true, "insertedIds" : [ 2, 3 ] 

> db.collection.insertMany( [   
     _id: 4, a: [  loc: "C" ,  qty: 10  ] ,  
     _id: 5, a: [  loc: "D", qty: 10  ]  ] )
 "acknowledged" : true, "insertedIds" : [ 4, 5 ] 

以上是关于Mongodb 唯一索引的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB - 唯一索引与复合索引

mongodb 唯一索引异常 怎么捕获

唯一索引不适用于 Mongoose / MongoDB

MongoDB——索引属性之唯一索引(Unique Indexes)

MongoDB——索引属性之唯一索引(Unique Indexes)

mongoDB 3.2中的唯一索引忽略空值