Firestore - выбор пользователя на основе навыка - PullRequest
0 голосов
/ 25 марта 2020

Я наткнулся на проблему с использованием пожарного магазина, возможно, мои ограниченные знания об этом. Точно сказать не могу. Однако я хочу сделать запрос к моей коллекции с помощью параметра запроса, который содержит строку, являющуюся навыком, и вернуть пользователя (ей), обладающего этим навыком. Я специально добавил всех пользователей в массив вместо того, чтобы создавать отдельные документы для каждого пользователя, так как я думаю, что он должен быть более эффективным (поправьте меня, если я ошибаюсь, пожалуйста).

Вот что я пробовал в коде:

  const result = await db
    .collection('foo')
    .where(`skills.${q}`, '==', true)
    .get()
    .then(snap => {
      if (snap.empty) {
        console.log('its empty');
      } else {
        const docs = snap.docs.map(doc => doc.data());
        console.log(docs);
      }
  });

q в коде, например, bar или baz в объекте skills.

А вот изображение представления в базе данных: enter image description here

И для более ясного представления о структуре я сделал снимок экрана почтальона, где я также разместил данные: enter image description here

Надеюсь, что это было достаточно ясно и заранее спасибо!

1 Ответ

1 голос
/ 25 марта 2020

Ваше поле пользователя на самом деле является полем типа списка с двумя элементами. Вы можете сказать из-за «0» и «1». Каждый из этих элементов списка содержит карту с несколькими полями.

Невозможно запросить отдельные свойства элементов списка документов в Firestore. Если вы хотите найти документы с определенным набором навыки, вместо этого у вас должно быть поле типа списка верхнего уровня, называемое «навыки», которое содержит строки навыков, которые вы хотите найти. Затем вы можете выполнить массив-любой-запрос , например:

  const result = await db
    .collection('foo')
    .where('skills', 'array-contains-any', ['bar', 'baz'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...