Можно ли выполнить проверку нулевой точки на поле между документами в Firestore? - PullRequest
0 голосов
/ 01 апреля 2020

В Firestore, должны ли все документы быть идентичными в отношении их полей?

Пример:

Если у документа A есть два поля, поле 1 и поле 2 и документ B имеют только В поле 1, когда я запускаю запрос, связанный с полем 2, есть ли способ поставить проверку нулевого указателя, потому что я знаю, что документ B выдаст мне ошибку.

Я знаю, что документы никогда не бывают нулевыми, но мне было интересно, есть ли способ ввести меры безопасности на уровне поля?

Примечание: Дагу и Алексу, поскольку мой ответ слишком длинный:

Спасибо Алекс и Даг, Я помню, как смотрел видео, в котором указывалось, что Firestore является свободной формой, и поэтому я создал базу данных такой, чтобы я мог расширяться по мере развития моего приложения.

Я понимаю ваш пример запроса выше с whereEqualTo из null, но если бы у меня был запрос следующим образом:

`queryForNullvalues = rootref.collection("coll).whereEqualTo("Field1","some random value")`, 

Тогда, когда я перехожу на следующий уровень, и я иметь

val fieldvalue = value.getString("field2") , 

Тогда вы обнаружите, что приложение аварийно завершает работу, потому что, если бы я выполнял этот запрос в документе 2, поле 2 не существовало. Это по сути, где проблема лежит. Это приложение предназначено для того, чтобы взломать sh на этом? потому что logcat выдаст ошибку nulpointer. Просто чтобы было ясно, если бы я использовал

val fiedlvalue = value.getString("field1") 

Это не может sh, поскольку field1 существует в обоих документах

Ответы [ 2 ]

4 голосов
/ 01 апреля 2020

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

Согласно официальной документации Документы Firestore могут содержать свойства, которые могут содержать значения null. Таким образом, null - это поддерживаемый тип данных :

Облачное хранилище файлов позволяет вам писать различные типы данных внутри документа, включая строки, логические значения, числа, даты, null , а также вложенные массивы и объекты.

Поэтому, если вы запрашиваете коллекцию для документов, и некоторые из них имеют свойства со значениями null, при получении значений таких свойств NullPointerException будет брошено. Этот подход полезен, поскольку он также позволяет создавать запросы, которые могут ограничивать результаты, если свойство содержит значение null. В Kotlin такой запрос выглядит следующим образом:

FirebaseFirestore rootRef = FirebaseFirestore.getInstance()
Query queryForNullValues = rootRef.collection("coll").whereEqualTo("field2", null)

Еще одна вещь, о которой вы должны позаботиться, это то, что это решение не то же самое, что пропустить свойство. Если вы используете классы модели (POJO) для записи данных в Firestore, все пустые свойства будут автоматически сохранены как null, а не как вовсе.

Редактировать:

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

val fieldvalue = value.getString("field2")

Вы можете получить исключение NullPointerException, если некоторые документы в вашей коллекции содержат null в качестве значения в field2.

Именно в этом и заключается проблема.

Разве это не то, что вы искали? Есть ли способ поставить проверку нулевого указателя, потому что я Я знаю, что документ B выдаст мне ошибку. "?

Чтобы решить эту проблему, просто проверьте свои fieldvalue против null:

if(fieldvalue != null) {
    //Use the value of fieldvalue
}

Это приложение предназначено для cra sh на этом?

Да, и это потому, что вы пытаетесь получить значение null.

val fiedlvalue = value.getString ( "field1")

Не обрабатывается sh, поскольку в вашей коллекции нет документа, в котором хранится в вашем field1 свойстве значение null.

0 голосов
/ 01 апреля 2020

Firestore не предъявляет абсолютно никаких требований к полям в документе. Это абсолютно свободная форма. Как таковая, она называется базой данных без схемы.

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

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

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