2
У меня есть конечные точки:Firebase предотвратить дубликаты ключей
/schools/$schoolId/rooms/$roomName/id
/schools/$schoolId/rooms/$roomName/name {must be unique ignoring case}
/schools/$schoolId/rooms/$roomName/{other attributes not relevant i think}
Я хочу, чтобы никакие две комнаты не имеют такое же имя, поэтому я хранящий его в качестве ключа. Я преобразование имен в нижний регистр перед установкой значения и поэтому у меня есть эти правила безопасности:
{
"rules": {
".read": "auth != null",
".write": "auth != null",
"schools":{
"$schoolId":{
"rooms":{
"$roomName":{
".validate": "$roomName===newData.child('name').val().toLowerCase() && !data.parent().child(newData.child('name').val().toLowerCase()).exists()"
}
}
}
}
}
}
Эти правила не позволяют мне писать новые номера.
Вам нужно создать структуру данных помощника для обеспечения уникальности. См. Http://stackoverflow.com/questions/25294478/how-do-you-prevent-duplicate-user-properties-in-firebase –
@FrankvanPuffelen Я бы хотел избежать дублирования данных, если это возможно. Мне было интересно, почему это правило, которое я пытаюсь, не работает. –
Управление дублируемыми данными программы полностью нормально в NoSQL. В этом случае то, что вам нужно построить, очень похоже на «уникальный индекс» в большинстве реляционных баз данных. Единственное отличие состоит в том, что это ваш код, который строит/поддерживает индекс, а не СУБД. См. Эту статью в [Моделирование данных NoSQL] (https://highlyscalable.wordpress.com/2012/03/01/nosql-data-modeling-techniques/). –