Массив Firebase-содержит - поиск по значениям, а не по ключам - PullRequest
0 голосов
/ 21 января 2020

Как запросить значение в массиве с набором цифр c?

Например, этот запрос не работает, потому что я считаю, что он смотрит на индексирование, а не на значения:

var db = firebase.firestore();
var users = db.collection("Users");
var currentUser = firebase.auth().currentUser;
var result = users.where('liked', 'array-contains', currentUser.uid);
if (result.length > 0) {
  return 'You have a match!';
} else {
  return 'No matches';
}

enter image description here

1 Ответ

2 голосов
/ 21 января 2020

Как прокомментировал Стратубас, проблема в следующем коде:

var result = users.where('liked', 'array-contains', currentUser.uid);

Этот код создает запрос, но еще не выполняет запрос. Таким образом, result является Query объектом . Чтобы выполнить запрос и получить результаты с сервера, вы вызываете get() для запроса , который затем возвращает Promise<QuerySnapshot>. Как только обещание получится, вы можете обработать результаты в QuerySnapshot объекте .

var query = users.where('liked', 'array-contains', currentUser.uid);
query.get().then(function(querySnapshot) {
  if (querySnapshot.size > 0) {
    console.log('You have a match!');
  } else {
    console.log('No matches');
  }
});

В более современных JavaScript вышеприведенное также можно записать в виде:

let query = users.where('liked', 'array-contains', currentUser.uid);
let querySnapshot = await query.get()
if (querySnapshot.size > 0) {
  console.log('You have a match!');
} else {
  console.log('No matches');
}
...