django - 具有唯一值或 null 的 Django MongoDB 模型字段
问题描述
我正在使用 Djongo v1.3.6 将 Django 连接到 MongoDB。现在我想有一个唯一值的可选字段 - 在我的情况下是电话号码。我认为可以将 null 作为没有电话号码的帐户的占位符。但是,MongoDB 似乎也将 null 视为唯一值。因此,一旦一个对象具有phone_number: null
我试图为phone_number
as声明索引,sparse
但它似乎没有任何效果。我现在在互联网上搜索了一段时间,但找不到任何对我的案子有用的东西。
class UserProfile(models.Model):
user = models.OneToOneField(AUTH_USER_MODEL, on_delete=models.CASCADE)
phone_number = models.CharField(validators=[PHONE_VALIDATOR], max_length=17, unique=True, null=True, blank=True)
...
meta = {
'indexes': [
{'fields': ['phone_number'], 'sparse' : True, 'unique' : True},
],
}
非常感谢任何帮助。
解决方案
我解决了这个问题,改变了 Djongo 使用 pymongo 创建的索引。
from pymongo import MongoClient, database, collection
collection.drop_index(index_name)
index_name = rchop(index_name, '_1')
collection.create_index(
[(index_name, pymongo.ASCENDING)],
partialFilterExpression = {
index_name : { "$exists" : True, "$gt" : "0", "$type" : "string" }
}
)
一旦我更改了索引,我就能够将空值插入 MongoDB,而不会牺牲对非空值的唯一检查
推荐阅读
- node.js - Mongoose:通过 findOneAndUpdate 查询使用嵌套对象数组的总和更新父子数据属性不起作用
- c# - 返回 List<> 继承 C#
- android - 如何将手机号码保存在firebase数据库中?
- python - Python转置数据并更改为0,1
- java - 火花工作之间的巨大时间差距
- typescript - 将输入值绑定到数组中的值
- python - 如何基于熊猫数据框中的单列(内爆或嵌套)合并多行?
- mongodb - 无法使用 Apache Kafka 使用 MongoDb 插件启动 Kafka Connect
- c# - 如何在机器人的自定义团队选项卡中配置是或否选项?
- python - 无法从 Pandas 中提取日期/年份/季度