Данные запроса из массива в firestore [duplicate]

Решение jAndy, вероятно, лучше всего, но если вы не можете полагаться на фильтр, вы можете сделать что-то вроде:

var myArray = [
    {field: 'id', operator: 'eq', value: 'id'}, 
    {field: 'cStatus', operator: 'eq', value: 'cStatus'}, 
    {field: 'money', operator: 'eq', value: "money"}
];

myArray.remove_key = function(key){
    var i = 0, 
        keyval = null;
    for( ; i < this.length; i++){
        if(this[i].field == key){
            keyval = this.splice(i, 1);
            break;
        }
    }
    return keyval;
}
1
задан Lahari Areti 27 February 2018 в 06:28
поделиться

2 ответа

Как в официальной документации :

Хотя Cloud Firestore может хранить массивы, it does not support запрашивать элементы массива или обновлять отдельные элементы массива.

< / blockquote>

Если вы хотите получить весь массив papers, вам нужно выполнить итерацию по Map следующим образом:

Map<String, Object> map = documentSnapshot.getData();
for (Map.Entry<String, Object> entry : map.entrySet()) {
    if (entry.getKey().equals("Phonenumbers")) {
        Log.d("TAG", entry.getValue().toString());
    }
}

Но обратите внимание, что даже если объект Phonenumbers сохраненный в базе данных как массив, entry.getValue() возвращает ArrayList, а не array.

Вам нужно использовать индексы только при запросе своей базы данных с использованием более одного свойства. Но это не ваш случай.

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

Phonenumbers: {
    "987654321": true,
    "123456789": true,
    "234567890": true
}

Редактировать 13 августа 2018 года:

Согласно обновленной документации относительно членства array , теперь можно фильтровать данные на основе значений массива с использованием метода whereArrayContains(). Простым примером может быть:

CollectionReference citiesRef = db.collection("cities");
citiesRef.whereArrayContains("regions", "west_coast");

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

1
ответ дан Alex Mamo 15 August 2018 в 23:16
поделиться
  • 1
    Существует альтернативный путь – Lahari Areti 27 February 2018 в 06:59
  • 2
    Чтобы проверить, существуют ли эти телефонные номера в другой коллекции, сначала вам нужно их получить. Но это невозможно в Cloud Firestore. Вы не можете запрашивать элементы массива. – Alex Mamo 27 February 2018 в 07:03
  • 3
    можно сказать, тогда как сохранить номер телефона в firestore для вышеуказанного требования – Lahari Areti 27 February 2018 в 07:07
  • 4
    См. Мой обновленный ответ. – Alex Mamo 27 February 2018 в 07:10
  • 5
    телефонные номера находятся в длинном массиве. В моем случае 987654321 являются значениями. мы можем использовать его как имя файла, и мы можем это получить. – Lahari Areti 27 February 2018 в 07:12

У вас должен быть запрос типа:

Как вы запрашиваете из коллекции в документ, а затем собираете из документа.

Объяснение:

с родительским узлом поскольку "Split" сначала извлекают "Split" collection, тогда может быть несколько документов в соответствии с "authid", поэтому вы получите документ в соответствии с currentUser (Пользователь, который подписал, извлечен из FirebaseAuth).

Как только вы получили document для конкретного Пользователя в соответствии с authId, вы получите f8 для этой конкретной коллекции пользователей из кода authId document

:

CurrentUser currentUser = FirebaseAuth.getCurrentUser();

firestore.collection("Split").document(currentUser.getUid()).collection("SendInvitation")
.get()
.addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
                            @Override
                            public void onComplete(@NonNull Task<DocumentSnapshot> task) {
                                if (task.isSuccessful()) {
                                    //Handle Success
                                } else {
                                    //Handle Error
                                }
                            }
                        });

В соответствии с структурой это будет запрос.

Надеюсь, что это поможет.

0
ответ дан mzeus.bolt 15 August 2018 в 23:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: