Поле модели Django MongoDB с уникальными значениями или null
Я использую Djongo v1.3.6 для подключения Django к MongoDB. Теперь я хочу иметь необязательное поле для уникального значения - в моем случае номер телефона. Я подумал, что можно иметь null в качестве заполнителя для аккаунтов, у которых нет номера телефона. Однако, похоже, что MongoDB также рассматривает null как уникальное значение. Таким образом, она не позволяет мне вставлять новые объекты в базу данных после того, как один объект имеет phone_number: null
Я попытался объявить индекс для phone_number
как 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, не жертвуя проверкой уникальности для не нулевых значений