Firestore: поиск элемента внутри массива документа, если он существует или нет - PullRequest
0 голосов
/ 05 января 2020

У меня есть коллекция с некоторыми документами. Каждый документ содержит несколько массивов со строками. Я хочу знать, есть ли данная строка внутри массива документов Speci c. Я видел запросы, чтобы найти документы, используя массив содержит. Но у меня есть документ, который я просто хочу запросить, существует ли строка в этом массиве документов или нет?

 var dbRef = dbConnection.db.collection('posts').doc(req.body.post_id);
dbRef.where('likes', 'array-contains', req.body.user_id).get()
    .then(data => {
        console.log(data);
    })
    .catch(err => {
        console.log(err);
    })

У меня есть документ с указанным c id. Я знаю идентификатор документа. Этот документ содержит массив, названный как лайки. Этот массив будет хранить несколько строк. Я хочу знать, существует ли строка в этом массиве или нет? Я получаю следующую ошибку

TypeError: dbRef.where is not a function

Затем я попытался без указания идентификатора документа. Это сработало. Он вернул документы. Но я хочу искать внутри массива документов

1 Ответ

1 голос
/ 05 января 2020

Ваш dbRef указывает на (один) документ, и вы не можете запросить документ.

Если вы хотите запросить документы в коллекции posts, вы ищете:

var dbRef = dbConnection.db.collection('posts');
dbRef.where('likes', 'array-contains', req.body.user_id).get()
  ...

Вы можете запрос как для идентификатора документа, так и для массива: затем проверьте на стороне клиента, содержит ли массив поле:

var dbRef = dbConnection.db.collection('posts').doc(req.body.post_id);
dbRef.get()
    .then(doc => {
        if (doc.data().likes.indexOf(req.body.user_id) >= 0) {
          ... the post is liked by the user
        }
    })
    .catch(err => {
        console.log(err);
    })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...