从ID包含特定引用的集合中获取所有文档



是否可以获取ID包含特定值的所有文档。我使用的是Angular 7。

我尝试了数据库收集('items'(where…,但不支持此操作。

示例

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

我可以对集合"items"进行查询以检索ID包含"apple"的所有文档吗。我似乎找不到一个有效的解决方案。

以下是我要做的:创建(或更新(文档时,使用您将用作标题的字符串来创建另一个属性,可以称之为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)

8月份,该产品引入了对搜索数组的支持,因此您可以在创建对象时跳过reduce,并在查询中询问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来构建搜索词字段,因此代码中所有完成创建的点都不必担心这一点。

最新更新