2017-03-15 28 views
0

我試圖開發一個系統擁有兩種不同的意見,是第一個視圖中的第一個「我的書」,第二個「其他人的書」Angularfire2和離子2 - 映射從火力地堡所有的UID除了currentuser的

我有這個工作的罰款

this.mybooks = angFire.database.list('/user-books', { 
    query: { 
    orderByChild: 'uid', 
    equalTo: firebase.auth().currentUser.uid 
    } 
}); 

,但我不知道如何創造的東西,將工作作爲一個「notEqualTo」功能,以排除當前用戶所擁有的所有書籍。

這是我參考

{ 
    "user-books" : { 
    "-KfJ9CprqgOWN9Ud_CvG" : { 
     "author" : "sdasd", 
     "city" : "asd", 
     "description" : "asdasd", 
     "title" : "asda", 
     "uid" : "bazvEYBL6sgfa6HSmqvtAlX3f0l2" 
    }, 
    "-KfJARoEU_FDW80hg4ws" : { 
     "author" : "in", 
     "city" : "chaaat", 
     "description" : "the", 
     "title" : "Pogchamps", 
     "uid" : "tzROGF1Tk4NcobrTE70ZKQzoKom1" 
    } 
    } 
} 

回答

1

火力地堡結構目前正在使用的巢的用戶對象中書籍火力點的數據結構,可能不是最適合你的確切使用。 firebase文檔有專門討論該權利的部分here。其中一個小節標題爲「避免嵌套數據」。

一個更好的結構將正常化書籍,並把它們放在一個單獨的集合/表格中。爲了存儲用戶書籍,您仍然可以擁有書籍數組,但是隻需存儲書籍表格中的鍵(ids)即可。

然後,列出其他人的書籍,將列出書籍表中的所有書籍並過濾出當前用戶的書籍。

請注意,特別是在像firebase這樣的數據存儲中,最佳數據結構完全取決於您如何使用數據。只有當您的應用專注於列出用戶的書籍時,將用戶書鏈接存儲在用戶對象內纔是一種好方法。相反,如果焦點集中在爲用戶列出書籍,最好將用戶標識數組存儲在書籍集合中。

+0

感謝您的提示,我現在把「書籍」移到了第一級,並在其中添加了「uid」字段,因此我可以過濾「我的書籍」屏幕上的書籍,但我仍然不知道如何排除數據,像「notEqualTo()」函數 – Leeandro0

+0

請注意,uid字段並非真正必要。您可以使用firebase分配給對象的$ key。此外,爲了進行過濾,您可以在* ngFor中使用[angular 2 pipe](https://angular.io/docs/ts/latest/guide/pipes.html),或者您可以使用[filter]之類的javascripts數組函數](https://developer.mozilla.org/nl/docs/Web/JavaScript/Reference/Global_Objects/Array/filter) – nickscheynen