是否可以获取ID包含特定值的所有文档。我正在使用Angular 7。
我尝试了db.collection('items')。where ..,但不支持。
示例
(collection)
/items
(doc)
/green apple
/red apple
/banana
/melon
我可以对集合“ items”进行查询以检索ID包含“ apple”的所有文档。我似乎找不到可行的解决方案。
答案 0 :(得分:0)
这就是我要做的:在创建(或更新)文档时,使用您将用作标题的字符串创建另一个属性,也许将其命名为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)
八月份,产品为introduced support for searching arrays,因此您可以在创建对象时跳过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
来构建搜索词字段,因此创建代码的所有点都不必为此担心。