Как выполнить ИЛИ запрос с транзакцией в облачном пожарном депо? - PullRequest
0 голосов
/ 21 января 2019

Если в myCollection существует какой-либо один документ, в котором массив содержит какое-либо значение массива arr, то я не хочу добавлять новый документ в myCollection2 Я хочу выполнить этот запрос в облачной функции.

структура пожарного депо

    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 
  });

});

это правильный подход?

1 Ответ

0 голосов
/ 21 января 2019

Нет способа сделать это.Что вы делаете, это комбинировать различные запросы, которые соответствуют вашим условиям и объединять их.Вот пример использования rxjs и машинописного текста

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]] ));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...