我的 firestore 檔案結構如下所示
檔案1
{
name: 'Test',
categories: [
{
allNames: ['name1', 'name2', 'name3],
id: 'abcd'
},
{
allNames: ['name4', 'name5'],
id: 'xyz'
},
]
檔案2
{
name: 'Test2',
categories: [
{
allNames: ['name7'],
id: 'abcd3'
},
{
allNames: ['name4', 'name5'],
id: 'xyz'
},
]
我正在使用 JS SDK 并想查詢具有特定類別(ID 或名稱)的所有檔案。因此,如果我使用categories.idequal toxyz或 categories.allNamescontains查詢,name1則應回傳上述兩個檔案。
這兩個查詢都是可能的還是我需要重構我的資料?
謝謝 !
uj5u.com熱心網友回復:
您不能以這種方式查詢陣列。如果您知道確切的物件,那么您可以使用array-contains如下所示:
firestore.collection('col').where('categories', 'array-contains', {id: 'abc', allNames: ['name1']})
一種解決方案是存盤另一個僅包含類別 ID 的陣列,如下所示:
{
name: 'Test1',
categories: [...],
categoryIds: ['abcd', 'xyz']
}
現在,arrayContains即使您只知道類別 ID 而不是類別陣列中的整個物件,您也可以使用。相同的方法可用于 allNames。
類別也可以成為一個子集合,其中類別陣列中的每個物件都是一個檔案。然后,您可以使用Collection Group查詢來查找具有該 ID 或 allNames 的類別檔案,并使用DocumentReference查找父檔案 ID 。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/346699.html
標籤:火力基地 谷歌云firestore
