Правило проверки Firebase, чтобы проверить, существует ли уже фильм с таким же названием - PullRequest
0 голосов
/ 11 февраля 2019

Я новичок в Firebase.Я делаю приложение, которое ищет фильмы и сохраняет их в базе данных в реальном времени.Данные для сохранения имеют следующую структуру:

var movieData = {
    title: "Frozen",
    genre: "Animation"
};

Я сохраняю фильм следующим образом:

database.ref().child("movies").push(movieData);

Это работает нормально.Проблема возникает, если я пытаюсь сохранить его дважды, поэтому в моей базе данных дублируется фильм:

{
  "movies" : {
    "-LYSENT90rjBj_fIAHpY" : {
      "genre" : "Animation",
      "title" : "Frozen"
    },
    "-LYSEPufvX3p3w-yXf4d" : {
      "genre" : "Animation",
      "title" : "Frozen"
    }
  }
}

Я пытаюсь создать правило проверки, которое проверяет , если какой-нибудь фильм стакой же заголовок уже существует .Моя последняя попытка такова:

{
  "rules": {
    ".read": true,
    ".write": true,
    "movies": {
      "$pushid" : {
        ".validate": "root.child('movies/' + newData.child('title').val()).val() === null"
      }
    }
  }
}

Мне трудно понять, как он проверяет все фильмы, если pushid отличается для каждого фильма.Более того, в симуляторе я видел, что могу тестировать только методы read, set и update.

Есть ли какой-нибудь способ добиться этого?Или было бы проще вручную проверить запрос в клиенте непосредственно перед отправкой фильма?

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Как насчет использования как Animation_Frozen в качестве pushid. Вы можете добавить две строки вместе на стороне клиента.

database.ref().child("Animation"+"_"+"Frozen").set(movieData)
0 голосов
/ 11 февраля 2019

Вы не можете выполнять отфильтрованные запросы в правилах безопасности.Единственный способ получить доступ к базе данных - это знать полный путь к узлу, который вы хотите прочитать.Поэтому я не думаю, что вы сможете сделать это с правилами безопасности.Вместо этого рассмотрите возможность использования облачных функций для оперативного удаления недействительных данных или пометки их как недействительные после их добавления.Или, как вы упомянули, сначала проверьте клиент, если это поможет.

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