Управление несколькими условиями с помощью Firestore - PullRequest
0 голосов
/ 05 апреля 2020

Я получаю результаты из моего collection, используя 3 поля поиска .

Если this.tag пусто, я не хочу, чтобы это .where("tagarray", "array-contains", this.tag) работало, аналогично, если this.dt пусто .where('lastActivityDate', '>=', this.dt) не должно работать. То же самое для this.leadstage.

Как мне управлять этим условием?

  loadItems(){
    this.firestore.collection('leads' , ref => ref 
.where("tagarray", "array-contains", this.tag) 
.where('lastActivityDate', '>=', this.dt) 
.where("leadstage" , "==" , this.leadstage) 

Редактировать 1

Весь мой код этой функции

loadItems(){
this.firestore.collection('leads' , ref => ref 
.where("tagarray", "array-contains", "tag1") //tag success
.where('lastActivityDate', '>=', '07-APR-2020') //date success
.where("leadstage" , "==" , 'Prospect') // leadstage success, this is case sensitive
.limit(5)
).snapshotChanges()
.subscribe(response => {
if(!response.length){
  console.log("no data available");
  return false;
}
this.tableData = [];
for(let item of response){
  var data = Object.assign(item.payload.doc.data(), {id : item.payload.doc.id})
  this.tableData.push(data);

...

Редактировать 2

Снимок экрана с ошибкой

enter image description here

Редактировать 3

Текущий код

    this.firestore.collection('leads' , (ref) => {
      let query = ref;
      if (this.tag) {
        query = query.where("tagarray", "array-contains", this.tag) 
      }
      if (this.dt) {
        query = query.where('lastActivityDate', '>=', this.dt) 
      }
      if (this.leadstage) {
        query = query.where("leadstage" , "==" , this.leadstage) 
      }
      return query; 
    }
    )
    .limit(5)
.snapshotChanges()
.subscribe(response => {
if(!response.length){
  console.log("no data available");
  return false;
}
...

Ошибки:

В типе 'Запрос' отсутствуют следующие свойства из типа 'CollectionReference': идентификатор, родитель, путь, do c, addts (2739)

Свойство «limit» не существует для типа «AngularFirestoreCollection» .ts (2339)

1 Ответ

0 голосов
/ 05 апреля 2020

Вы можете создать свой запрос с помощью нескольких проверок условий, например:

this.firestore.collection('leads' , (ref) => {
  let query = ref;
  if (this.tag) {
    query = query.where("tagarray", "array-contains", this.tag) 
  }
  if (this.dt) {
    query = query.where('lastActivityDate', '>=', this.dt) 
  }
  if (this.leadstage) {
    query = query.where("leadstage" , "==" , this.leadstage) 
  }
  return query; 
})...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...