处理未定义的值以搜索Firestore数据库

时间:2018-04-29 11:31:46

标签: typescript firebase ionic-framework firebase-realtime-database

我有一个包含大约10个可能字段的搜索页面,但不是每个字段都需要搜索。但是我如何构建查询以便它不会查看未填充的值(并且未定义)?

我不能在打字稿中写一个if语句(我先尝试过),因为那样我就要编写10多个不同的可能查询,这些查询似乎效率不高。

那么如何删除未定义的条目并重用相同的查询呢?

我真的不知道如何开始尝试这一点,所以任何帮助都非常感谢。

编辑:

Search screen

查询:

this.itemsCollectionHouse = this.afs.collection<House>('houses', ref=> ref.where('garden', '==', true).orderBy('name'));

因此屏幕截图显示了用户可以在搜索字段中输入输入的屏幕。然后查询只是我想做的一小部分,因为我不知道如何继续。但是,我需要能够在输入所有字段时执行搜索查询,而且还需要在搜索屏幕中的一个或多个字段为空/未定义时执行搜索查询。

例如,如果用户未选择 garden 并且未定义,那么如何在没有该变量的情况下执行查询但仍会搜索已填写的字段?

1 个答案:

答案 0 :(得分:0)

在单击提交按钮之前,您不与Firebase对话(与在keyup和onchange事件上与Firebase对话)。因此,您的任务实际上是一个简单的任务。

除非您有充分的理由不这样做,否则请使用JavaScript。另外,请使用Firestore,因为它支持compound queries

var myArray = [];
var whereString = "";
if(selectOne.value){
  myArray.push('"state", "==", ' + selectOne.value);
} 
if(selectTwo.value){
  myArray.push('"color", "==", ' + selectTwo.value);
} 
if(inputOne.value){
  myArray.push('"population", "<", ' + inputOne.value);
} 

for (var i = 0; i < myArray.length; i++) {
  whereString = whereString + ".where(myArray[i])"
}

myRef = firebase.firestore() + whereString