Firebase how to index this data to be fetched? -


i have db users , items.

every user has languages, array of languages, example ['en', 'ar']

every item has language, string, example 'en'.

how can index items, such can list of last x items in array of languages? (i.e - latest 5 items either 'en' or 'ar')

for single language solution simple - have index has language key, , array of item keys ordered whatever.

please note firebase official documentation recommends against using arrays. imho, main problem in project trying use array, anti-pattern when comes firebase. beside that, 1 of many reasons firebase recommends against using arrays makes security rules impossible write. because firebase database structured pairs of key , values, best option use map.

to achieve want, recomand using database structure looks this:

firebase-root     |     --- users     |     |     |     --- uid1     |     |    |     |     |    --- languages     |     |            |     |     |            --- languageid1: true     |     |            |     |     |            --- languageid2: true     |     |     |     --- uid2     |          |     |          --- languages     |                  |     |                  --- languageid3: true     |                  |     |                  --- languageid4: true     |     --- languages     |      |     |      --- languageid1     |      |      |     |      |      --- languagename: "en"     |      |      |     |      |      --- items     |      |           |     |      |           --- itemid1: true     |      |     |      --- languageid2: "ar"     |      |      |     |      |      --- languagename: "ar"     |      |      |     |      |      --- items     |      |           |     |      |           --- itemid2: true     |     --- item          |          --- itemid1          |     |          |     --- title: "itemtitleen"          |     |          |     --- en: true          |          --- itemid2                |                --- title: "itemtitlear"                |                --- ar: true 

now, database structure can achieve want. example, can query database display languages database. can display languages of single user.

if want query database last x item have language set en, need put listener on items node , create query using functions like: orderbychild(), equalsto() , limittolast(). such query should this:

query = rootref.child("items")     .orderbychild("en")     .equalsto(true)     .limittolast(5)     .addlistener(/* ... */) 

edit: unfortunately firebase not allow multiple conditions in query. in firebase there no clause sounds this: where language = "en" , language = "ar". solve this, need put listener on other node, on languages node.

the flow follows:

yourref = rootref.child("languages"); //only 1 listener yourref.addlistener(     1. create list     2. items datasnapshot.child("languageid1").child("items").getchildren()     3. add **en** items list     4. items datasnapshot.child("languageid2").child("items").getchildren()     5. add **ar** items list     6. display list contains data both languages ) 

hope helps.


Comments

Popular posts from this blog

ubuntu - PHP script to find files of certain extensions in a directory, returns populated array when run in browser, but empty array when run from terminal -

php - How can i create a user dashboard -

javascript - How to detect toggling of the fullscreen-toolbar in jQuery Mobile? -