首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Firebase:如何为相同的关键字查询检索两个值?

Firebase:如何为相同的关键字查询检索两个值?
EN

Stack Overflow用户
提问于 2018-06-20 12:06:18
回答 4查看 1.7K关注 0票数 0

我要做的是用相同的键查询Firebase的两个值。我的数据库是这样的:

代码语言:javascript
复制
"Document" : [ {
    "fileType" : "PDF",
    "language" : "en",
    "linkUrl" : "https://myfile.pdf",
    "name" : "Installation Guide"
  }, {
    "fileType" : "DOCUMENT",
    "language" : "fr",
    "linkUrl" : "https://myfile.txt",
    "name" : "text.txt"
  }

我在我的Android项目中编写了一个查询,以检索所有使用同一种语言的文档,并且它可以工作。

代码语言:javascript
复制
val selectedLanguage = LocalStorageHelper.getInstance(this)?.getSelectedLanguage()
val docRef = rootRef.child("Document").orderByChild("language").equalTo("en")

但现在我想做的是,寻找"en“和"fr”。

是否可以像上面这样做,我已经在网上搜索,但没有发现任何积极的这一点。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-06-20 12:17:43

不能在firebase数据库中使用AND子句,只能对一种语言进行查询,因此只能:

代码语言:javascript
复制
orderByChild("language").equalTo("en")
票数 1
EN

Stack Overflow用户

发布于 2018-06-20 12:46:01

过滤客户端上的语言。

代码语言:javascript
复制
val docRef = rootRef.child("Document").orderByChild("language").on('value', function(snapshot) {
  val filteredDocuments = snapshot.val().filter(function(document) {
    return document.language === 'en' || document.language === 'fr';
  });
});
票数 0
EN

Stack Overflow用户

发布于 2018-06-20 12:57:51

正如@PeterHaddad在他的答复中提到的那样,不幸的是,Firebase中没有AND操作符。如果您说您不能在这是一个简单操作的情况下进行修复,那么您需要知道,我们有一个解决办法,可以帮助您实现相同的目标。因此,要解决这个问题,可以创建一个复合节点,该节点可以保存将语言属性设置为enfr的所有对象。数据库结构应该如下所示:

代码语言:javascript
复制
Firebase-root
  |
  --- EnFrDocuments
  |      |
  |      --- documentId
  |      |     |
  |      |     --- fileType: "PDF"
  |      |     |
  |      |     --- language: "en"
  |      |     |
  |      |     --- linkUrl: "https://myfile.pdf"
  |      |     |
  |      |     --- name : "Installation Guide"
  |      |
  |      --- documentId
  |            |
  |            --- fileType: "DOCUMENT"
  |            |
  |            --- language: "fr"
  |            |
  |            --- linkUrl: "https://myfile.txt"
  |            |
  |            --- name : "myfile.txt"
  |
  --- Documents
        |
        --- //use the same structure

结构,我建议您也将其用于Document节点,而不是将其存储到数组中。

这种做法称为denormalization,在Firebase方面是一种常见的做法。为了更好的理解,我建议你看这个视频,在Firebase数据库中,取消规范化是正常的

另外,当您复制数据时,有一件事需要记住。以同样的方式添加数据,您需要维护它。换句话说,如果你想更新/确认一个项目,你需要在它存在的每一个地方做它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50947856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档