博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mongoengine
阅读量:5038 次
发布时间:2019-06-12

本文共 2379 字,大约阅读时间需要 7 分钟。

一、唯一索引

mongo的唯一索引如果字段有值为空的话,就会报错“NotUniqueError: Tried to save duplicate unique keys”,这个时候就需要设置唯一索引为sparse了,下面介绍两种方法,虽然样式不同,但是实际上是一样的。

方法1:

class User(DynamicDocument):    """    用户信息表    """    uid = SequenceField(primary_key=True, value_decorator=uid_value_decorator)  # 用户id    wechat_open_id = StringField(max_length=200)    wechat_union_id = StringField(max_length=200)    phone_number = StringField(max_length=200)  # 手机号码      meta = {        "collection": "easy_user",        'index_background': True,        "indexes": [            {'fields': ('wechat_open_id'), 'unique': True, 'sparse': True},    # sparse 稀疏索引,允许值为空            {'fields': ('wechat_union_id'), 'unique': True, 'sparse': True},            {'fields': ('phone_number'), 'unique': True, 'sparse': True},            ],    }

方法2:设置字段为unique=True, sparse=True

class User(DynamicDocument):    """    用户信息表    """    uid = SequenceField(primary_key=True, value_decorator=uid_value_decorator)  # 用户id    wechat_open_id = StringField(unique=True, sparse=True, max_length=200)    wechat_union_id = StringField(unique=True, sparse=True, max_length=200)    phone_number = StringField(unique=True, sparse=True, max_length=200)  # 手机号码      meta = {        "collection": "easy_user",    }

二、mongoengine中meta中设置索引

class User(DynamicDocument):    """    用户信息表    """    user_id = SequenceField(primary_key=True, value_decorator=uid_value_decorator)  # 用户id    wechat_open_id = StringField(max_length=200)    wechat_union_id = StringField(max_length=200)    phone_number = StringField(max_length=200)  # 手机号码    dt = StringField(max_length=200, default='')      meta = {        "collection": "easy_user",        'index_background': True,         "indexes": [            'user_id',             [('dt', 1), ('user_id', 1)],              {'fields': ('wechat_open_id'), 'unique': True, 'sparse': True},                {'fields': ('user_id', 'wechat_open_id'), 'unique': True},             ],    }
meta字段名 详解
'index_background': True 后台创建索引(如果不设置这个话,就会马上创建索引,表很大的时候就需要耗费很长时间,生成索引的过程中表会被锁住,从而导致该表无法提供服务,严重的话会导致线上服务崩溃)
user_id 单列索引
[('dt', 1), ('user_id', 1)] dt,user_id, type的复合索引,每个字段都采取升序(升序为1, 降序为-1)
{'fields': ('wechat_open_id'), 'unique': True, 'sparse': True} sparse 稀疏索引,允许值为空
{'fields': ('user_id', 'wechat_open_id'), 'unique': True} user_id, wechat_open_id的唯一索引

转载于:https://www.cnblogs.com/lanlingshao/p/10060630.html

你可能感兴趣的文章
团队冲刺02
查看>>
win7 - net 命令
查看>>
Java入门教程四(字符串处理)
查看>>
Windows Phone开发(23):启动器与选择器之CameraCaptureTask和PhotoChooserTask
查看>>
Linux 系统目录结构
查看>>
HealthKit开发教程之HealthKit的主要类型数据
查看>>
weblogic加载hibernate3时,ClassNotFoundException的解决方法
查看>>
我的软件工程之路(三)
查看>>
Nastya Studies Informatics CodeForces - 992B (大整数)
查看>>
Kilani and the Game CodeForces - 1105D (bfs)
查看>>
通过普通用户向各个节点服务器分发文件到各个目录
查看>>
SpringBoot swagger-ui.html 配置类继承 WebMvcConfigurationSupport 类后 请求404
查看>>
深入理解计算机系统(2.4)------整数的表示(无符号编码和补码编码)
查看>>
TCP/IP详解学习笔记(4)-ICMP协议,ping和Traceroute
查看>>
01 Linear Regression with One Variable
查看>>
计算矩阵转置函数的步总数公式
查看>>
【Linux】- CentOS 防火墙iptables和firewall
查看>>
selenium安装及官方文档
查看>>
【SVN】导出项目后报错汇总
查看>>
使用Redis存取数据+数据库存取(spring+java)
查看>>