Как потребовать уникальное значение для поля элемента списка в Firebase без ключевого значения? - PullRequest
0 голосов
/ 22 мая 2018

Я делал небольшое приложение для чата, используя Angular и Firebase.Я столкнулся с некоторыми проблемами с уникальностью, хотя.В приложении есть общедоступные каналы, и я хочу, чтобы названия каналов были уникальными.Я использовал ключ, чтобы навязать уникальность, но мне было интересно, есть ли лучший способ сделать это.Вот мои текущие правила проверки.

{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null",
    "public-channels": {
      "$name": {
        ".validate": "!root.child('public-channels').child($name).exists()"  
      }
    }
  }
}

Вот пример данных

{
  "public-channels" : {
    "test1" : {
      "displayName" : "Test1"
    },
    "test2" : {
      "displayName" : "Test2"
    }
  }
}

Знаете ли вы, есть ли решение этой проблемы, где данные могут быть структурированы какСтандартные данные списка, которые используют uid в качестве ключа и по-прежнему обеспечивают уникальность на уровне базы данных?

Формат данных, который я хотел бы использовать, выглядит следующим образом:

{
  "public-channels": {
    "SomeUID": {
      "name": "Channel Name" // This value should be unique
    }
  }
}

Причина желанийэта структура состоит в том, что есть некоторые символы, которые нельзя использовать в пути к значению (".", "#", "$", "[" или "]"), и я хотел бы разрешить эти символыв названиях каналов.

1 Ответ

0 голосов
/ 23 мая 2018

Нет способа обеспечить уникальность определенного значения в коллекции дочерних узлов.Именно поэтому люди используют ключи для обеспечения уникальности.

Чтобы обойти запрещенные символы в ключе, я обычно кодирую значения.Простого кодирования URL может быть достаточно, хотя, вероятно, существуют более простые схемы, которые работают одинаково хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...