【问题标题】:Handle undefined values to search Firestore database处理未定义的值以搜索 Firestore 数据库
【发布时间】:2018-10-09 16:44:52
【问题描述】:

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

我无法在 typescript 中编写 if 语句(我首先尝试过),因为那样我将不得不编写超过 10 个不同的可能查询,这看起来效率不高。

那么我怎样才能删除未定义的条目并重复使用相同的查询呢?

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

编辑:

Search screen

查询:

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

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

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

【问题讨论】:

  • 如果您需要有用的答案,您需要向我们提供更多信息。向我们展示您的输入数据和所需的查询。
  • 嗨,谢谢。我在我原来的问题中添加了更多信息,我希望能澄清一些事情。不要犹豫,问它是否不够清楚。我不确定如何更好地描述我想要实现的目标。感谢您的帮助。

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


【解决方案1】:

在单击提交按钮之前,您不会与 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

【讨论】:

  • 感谢您的回复。但我不明白它怎么这么简单。 :) 我正在使用 JavaScript 和 Firestore。但是当值未定义时,我不能使用它们来查询 Firestore,因为那里的值总是 true 或 false,所以当搜索字段中的值是“未定义”时,它应该返回所有具有“真”或“ false' 为该字段。我能看到如何做到这一点的唯一方法是使用“if”子句单独检查所有值并根据结果构建不同的查询,但这似乎非常低效。
  • 嗨,我不知道如何继续使用“myRef”变量来查询正确的集合/文档。我在文档中没有找到答案。我应该做这样的事情: var myRef = firebase.firestore() + whereString this.itemsCollectionHouse = this.afs.collection('house', myRef) 这在最后一行给出了一个错误,所以我肯定做错了什么。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-05
  • 1970-01-01
  • 1970-01-01
  • 2016-07-14
  • 1970-01-01
  • 2012-06-15
相关资源
最近更新 更多