从集合中获取所有文档,其中ID包含某些参考

时间:2018-12-12 19:31:48

标签: javascript google-cloud-firestore

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

我尝试了db.collection('items')。where ..,但不支持。

示例

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

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

1 个答案:

答案 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来构建搜索词字段,因此创建代码的所有点都不必为此担心。