2017-06-05 87 views
0

我在取得複雜結構的Firebase數據時遇到問題。 我有這樣的結構:Firebase查詢參考:true

place1: { 
visits: { 
    user1: true, 
    user2: true, 
    user3: true, 
    user4: true 
} 
}, 
place2: { 
visits: { 
    user1: true, 
    user3: true, 
    user4: true 
} 
}, 
place3: { 
visits: { 
    user2: true, 
    user3: true, 
    user4: true 
} 
} 

你怎麼查詢所有已對所有地方的用戶?

非常感謝您的幫助!

回答

1

您當前的數據結構允許您有效地對已到過特定位置的所有用戶進行處理。它不允許你高效地查詢特定用戶去過的所有地方。

要允許第二個查詢,您應該添加第二個數據結構:

user1: { 
    place1: true, 
    place2: true 
}, 
user2: { 
    place1: true, 
}, 
user3: { 
    place1: true, 
    place3: true 
}, 
user4: { 
    place1: true, 
    place2: true, 
    place3: true, 
    place4: true 
} 

有了這個額外的結構(通常稱爲倒排索引),你可以找到每一個用戶來到的地方。

由於您現在有兩個結構,您需要確保將每次訪問都添加到兩個地方。一個多位置更新可以做到的是:

function recordVisitor(uid, placeid) { 
    var updates = {}; 
    updates[`/userVisits/${uid}/${placeid}`] = true; 
    updates[`placeVisitors/${placeid}/${uid}`] = true; 
    firebase.database().ref().update(updates); 
} 

另請參閱我的回答對相關使用情況(查詢類別中的項目)也要求倒排索引:http://stackoverflow.com/questions/40656589/firebase-query-if-child-of-child-contains-a-value

+0

太謝謝你了。然而,這種數據結構是否可擴展? – pat3ck029