Получить все документы из коллекции, где в идентификационном номере указан - PullRequest
0 голосов
/ 12 декабря 2018

Возможно ли получить все документы, в которых идентификатор содержит определенное значение.Я использую Angular 7.

Я пробовал db.collection ('items'). Где .. но это не поддерживается.

Пример

(collection)
/items
     (doc)
     /green apple
     /red apple
     /banana
     /melon

МожетЯ делаю запрос к коллекции «items», чтобы получить все документы, в которых идентификатор содержит «apple».Кажется, я не могу найти рабочее решение.

1 Ответ

0 голосов
/ 13 декабря 2018

Вот что я бы сделал: при создании (или обновлении) документа используйте строку, которую вы использовали бы в качестве заголовка, для создания другого свойства, возможно, назовите его searchTerms:

let docName = 'green apple';
let ref = /* some path */.collection('items').doc();  // optionally use docName here
let doc = { /* however you initialize your doc */ }

doc.searchTerms = docName.split(' ').reduce((acc, term) => {
      acc[term] = true;
      return acc;
    }, {});
    // that will set searchTerms to { 'green':true, 'apple':true }

ref.set(doc)

Позже вы можете запросить эти документы следующим образом:

let targetTerm = 'apple'
let key = `searchTerms.${targetTerm}`;
let query = /* some path */.collection('items').where(key, '==', true)

В августе продукт представил поддержку поиска в массивах , так что вы можете пропустить сокращение при создании объекта и спроситьwhere-contains в запросе, например:

// as before
doc.searchTerms = docName.split(' ');
ref.set(doc)

и позже:

let targetTerm = 'apple'
let query = /* some path */.collection('items').where('searchTerms', 'array-contains', targetTerm)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...