java - 如何使用 Firebase 查询 equalTo(value, key)?

标签 java android firebase firebase-realtime-database

作为 firebase 的新手,我试图在这个简单的用例中模仿一种“where 子句”请求来检索用户的钱包:

User
   48bde8f8-3b66-40bc-b988-566ccc77335c
      email: "toto@acme.com"
      username: "userTest1"

UserWallet
   F4PvtvNT2Z
      coins: 26
      someList
         elemet1
         elemet2 
      user: "48bde8f8-3b66-40bc-b988-566ccc77335c"

首先我尝试像这样编写我的请求:

Firebase root = new Firebase("https://myApp.firebaseio.com/");
Firebase ref = root.child("UserWallet");
Query query = ref.equalTo("48bde8f8-3b66-40bc-b988-566ccc77335c", "user");

结果为空,所以我写了这个查询:

Query query = ref.orderByChild("user").equalTo("48bde8f8-3b66-40bc-b988-566ccc77335c", "user");

结果再次为空。检索钱包的唯一方法是使用以下查询:

Query query = ref.orderByChild("user").equalTo("48bde8f8-3b66-40bc-b988-566ccc77335c");

那么在使用“equalTo()”之前,我是否必须始终使用 en“orderByChild()”查询?
那么,查询“equalTo(String value, String key)”与“equalTo(String value)”相比的目的是什么,因为只有第二个可以正常工作?

最佳答案

有些极端情况不需要 orderBy...(),但一般情况下,您之前需要 orderBy...()过滤操作(equalTo()startAt()endAt())。

我强烈建议您先阅读 Firebase programming guide for Android (其中 95% 也适用于常规 Java)。在该指南中花费了几个小时,将在这里节省数十个问题。例如:这是 section on queries .

读完之后,您可能还想在 NoSQL Data Modeling 上阅读本指南.它涵盖了 NoSQL 数据建模中的许多常见模式,并将帮助您尽早意识到尝试将 SQL 查询映射到 NoSQL 数据库是一个合乎逻辑的想法,但很少是一个好的想法。

我的初始模型(对您的用例一无所知,除了“我需要能够找到用户的钱包”)模型:

UserWallet
   "48bde8f8-3b66-40bc-b988-566ccc77335c"
      "F4PvtvNT2Z"
         coins: 26
         someList
            element1
            element2 

在上述模型中,我将 UserWallet 下的 WalletUser 倒置,以便查找钱包用户变得更容易。

ref.child('UserWallet').child(auth.uid).addValueEventListener(...

请注意,此处不涉及查询,因此无论您的数据库中有多少用户,加载速度都一样快。

或者:

User
   "48bde8f8-3b66-40bc-b988-566ccc77335c"
      email: "toto@acme.com"
      username: "userTest1"

Wallet
   "F4PvtvNT2Z"
      coins: 26
      someList
         element1
         element2 

UserWallet
   "48bde8f8-3b66-40bc-b988-566ccc77335c"
      "F4PvtvNT2Z"

现在我们已经完成了扁平化的结构。要确定用户的钱包,请转到 UserWaller/$uid,然后从 Wallets/$walletid 加载每个钱包。它可能会多一些代码,但它会非常高效(因为不涉及任何查询)。

关于java - 如何使用 Firebase 查询 equalTo(value, key)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35552571/

相关文章:

java - 基本 Firebase Java 连接

ios - 函数不会运行所有行

java - 如何使 photoview 库与 viewpager 一起工作

java - 无法使用 mongodb Java 驱动程序初始化类 com.mongodb.connection.MongoQueryAnalyzer

java - 如果双指同时触摸屏幕,则无法捏合缩放

android - android 设备连接到 WIFI 时不接收 GCM 消息

android - FirebaseApp 名称 [DEFAULT] 已存在

java - ObjectOutputStream.toByteArray 返回垃圾

java - 获取运行时错误

android - 何时以及为何在 android 中使用 Fragment#isAdded() 方法?