Решение 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;
}
Как в официальной документации :
Хотя Cloud Firestore может хранить массивы,
< / blockquote>it does not support
запрашивать элементы массива или обновлять отдельные элементы массива.Если вы хотите получить весь массив
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. Если массив имеет несколько экземпляров запрашиваемого значения, документ включается в результаты только один раз.
blockquote>
У вас должен быть запрос типа:
Как вы запрашиваете из коллекции в документ, а затем собираете из документа.
Объяснение:
с родительским узлом поскольку "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
}
}
});
В соответствии с структурой это будет запрос.
Надеюсь, что это поможет.