javascript - 如何与云firestore中的事务执行OR查询?

标签 javascript google-cloud-firestore

如果 myCollection 中存在任何单个文档,其中数组包含 arr 数组的任何值,那么我不想在 myCollection2 中添加新文档,我想运行此查询云功能。

firestore结构

    myCollection
              myDoc1
                  array:[1,2,3]
              myDoc2
              array:[5,8,7]*
   myCollection2 ....
<小时/>

我是如何做到的

const arr=[2,5,8,9];

return db.runTransaction(async t=>{

  for(let i=0,i<arr.length<t++){
    await  t.get(db.collection('myCollection').where('array','array-contains'arr[i]).then(doc=>{
      if(doc.exists) throw new functions.http.httpError('internal','not available');
    })
  }

  return db.collection('mycollection2').add({
    //fields 
  });

});

这是正确的方法吗?

最佳答案

没有办法做到这一点。您要做的就是组合与您的术语匹配的不同查询并将它们组合起来。这是使用 rxjs 和 typescript 的示例

function getData(value1, value2)
{
    const scenario1 = this.afs.collection(`collection1`, ref => {
                let query: firebase.firestore.CollectionReference | f 
   firebase.firestore.Query = ref;
                query = query.where("field1", "==", value1);
                return query;

            }).snapshotChanges()
                .pipe(take(1))
                .pipe(
                    map(changes => {
                        return changes.map(a => {
                            const data = a.payload.doc.data() as CustomDataType;
                            data.docId = a.payload.doc.id;
                            return data;
                        })
                    })
                );


    const scenario2 = this.afs.collection(`collection1`, ref => {
                let query: firebase.firestore.CollectionReference | firebase.firestore.Query = ref;
                query = query.where("field1", "==", value2);
                return query;

            }).snapshotChanges()
                .pipe(take(1))
                .pipe(
                    map(changes => {
                        return changes.map(a => {
                            const data = a.payload.doc.data() as CustomDataType;
                            data.docId = a.payload.doc.id;
                            return data;
                        })
                    })
                );
            return forkJoin(scenario1,scenario2)
                .pipe(map((arr) => [...arr[0],...arr[1]] ));
}

关于javascript - 如何与云firestore中的事务执行OR查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54288187/

相关文章:

javascript - 不是 jQuery 链中下一个元素的选择器

javascript - 更改一列时如何更新 HTML 表格行中的单元格?

javascript - Firebase 模拟器上的 Firebase 权限被拒绝错误

reactjs - 为什么我在 React 应用程序中没有获取 Firebase 存储文件 url?

node.js - 在 ES6 中导入 DocumentReference

javascript - 如何改变 Angular 个人资料图片?

javascript - Firebase 安全规则不起作用

firebase - 我们是否为失败的 Firestore 交易收费

node.js - GCP 上的微服务

javascript - iOS Web App 触摸手势