mongoDB 数据重复问题

2021-01-06  本文已影响0人  Joncc

MongoDB 索引

索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录。

这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可以要花费几十秒甚至几分钟,这对网站的性能是非常致命的。

索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构
  1. createIndex() 方法
    MongoDB使用 createIndex() 方法来创建索引。

注意在 3.0.0 版本前创建索引方法为 db.collection.ensureIndex(),之后的版本使用了 db.collection.createIndex() 方法,ensureIndex() 还能用,但只是 createIndex() 的别名。

  1. 语法
    createIndex()方法基本语法格式如下所示:
>db.collection.createIndex(keys, options)
image.png

设置唯一值索引字段,解决插入数据重复

# 单个字段唯一索引 这里的name:1的意思是升序,name:-1 是降序
db.collection.createIndex({name:1},{unique:true}) 
如需要多个字段联合唯一索引,可参照如下方式:

# 多个字段联合索引示例
db.collection.createIndex({ip:1,server_port:1},{unique:true})
try:
    db.collection.insert_one(dict_example)
except DuplicateKeyError:
    # 重置更新abbs字段
    db.collection.update_one({"name":name_example}, {"$set": {"abbs":abbs_example}})
    # 增量不重复的方式更新source字段
    db.collection.update_one({"name":name_example}, {"$addToSet":{"abbs":{"$each":abbs_example}}})

这样既提高了MongoDB的写入的效率也解决了并发下重复数据的问题

use manegers
db.manegers.drop()
db.createCollection("manegers")
db.manegers.createIndex({"ip":1,"server_port":1},{unique:true})
db.manegers.getIndexes()

[
        {
                "v" : 2,
                "key" : {
                        "_id" : 1
                },
                "name" : "_id_",
                "ns" : "manegers.manegers"
        },
        {
                "v" : 2,
                "unique" : true,
                "key" : {
                        "ip" : 1,
                        "server_port" : 1
                },
                "name" : "ip_1_server_port_1",
                "ns" : "manegers.manegers"
        }
]

参考:越大大雨天
链接:https://www.jianshu.com/p/adedee065c28
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

上一篇 下一篇

猜你喜欢

热点阅读