Firestore wherequalto объект

#android #firebase #kotlin #google-cloud-firestore

#Android #firebase #kotlin #google-облако-firestore

Вопрос:

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

У меня есть следующий код ниже, но он ничего не возвращает.

 val obj = mapOf(
    "type" to "Admin"
)

Firebase.firestore
    .collection("Caves")
    .whereEqualTo("author", obj)
    .get()
    .addOnSuccessListener {
        Debug.log("success: %s", it.documents.size) // it.size is also 0 where it should be 3
    }
  

Примерная структура данных выглядит следующим образом:

 "Caves"
[
    {
        author: {
            type: "Admin",
            id: 123,
            displayName: "Test"
        },
        ...
    },
    ...
]
  

В C # это было бы так просто, как: caves.Where(e => e.Author.Type == Type.Admin)

Есть ли способ использовать whereEqualTo() против объекта?

Я неправильно структурировал свои данные?


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

Скриншот данных Firestore: введите описание изображения здесь

Комментарии:

1. Не могли бы вы поделиться скриншотом своей структуры firestore? Я спрашиваю об этом, поскольку меня смущает ваше представление выше, поскольку вы добавили его в эту структуру: [{{}}] , это означало бы, что внутри Caves коллекции объект author, который вы хотите получить, является объектом внутри другого объекта внутри массива, это неверно, не так ли? Если возможно, пожалуйста, поделитесь скриншотом, так как это упростит понимание.

2. @RafaelLemos да. Я помещаю объект в коллекцию. Я делаю это неправильно? Должно ли оно быть ограничено только парами ключ / значение? Кстати, я добавил скриншот.

3. Я думал, что он существует в массиве. Ответ Дуга правильный 😉

Ответ №1:

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

 Firebase.firestore
    .collection("Caves")
    .whereEqualTo("author.type", "Admin")
    .get()
    .addOnSuccessListener {
        Debug.log("success: %s", it.documents.size) // it.size is also 0 where it should be 3
    }
  

Обратите внимание на поле «author.type». Единственное упоминание о точечной нотации содержится в документации к обновлениям, но оно работает и для запросов.

Комментарии:

1. Это отлично работает, спасибо! Я на самом деле не смотрел update связанные с запросами, welp.