How to use Firebase query equalTo(value, key)?

前端 未结 2 1241
时光取名叫无心
时光取名叫无心 2021-02-02 13:04

As a newbie in firebase I tried to mimic a kind of \"where clause\" request to retrieve the user\'s wallet in this simple use case:

User
   48bde8f8-3b66-40bc-b         


        
2条回答
  •  执念已碎
    2021-02-02 13:34

    There are some edge cases that don't need an orderBy...(), but in general you'll need an orderBy...() before a filtering operation (equalTo(), startAt(), endAt()).

    I highly recommend that you first read the Firebase programming guide for Android (95% of it applies to regular Java too). A few hours spent in that guide, will save dozens of questions here. For example: this is the section on queries.

    After reading that, you might also want to read this guide on NoSQL Data Modeling. It covers many common patterns in NoSQL data modeling and will help you realize early on that trying to map SQL queries to a NoSQL database is a logical idea, but seldom a good one.

    My initial (without any idea on your use-cases, except for "I need to be able to find the wallets for a user") model:

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

    In the above model, I've inverted the Wallet and User under UserWallet, so that looking up the wallet(s) for a user becomes easier.

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

    Note that there is no query involved here, so loading will be equally fast no matter how many users you have in your database.

    Or alternatively:

    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"
    

    Now we've complete flattened the structure. To determine the wallets of a user, you go to UserWaller/$uid and then load each wallet from Wallets/$walletid. It may be a bit more code, but it'll be extremely efficient (since there are no queries involved).

提交回复
热议问题