第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Firestore 中查詢對象鍵

在 Firestore 中查詢對象鍵

斯蒂芬大帝 2022-06-05 17:00:42
我的 Firestore 查詢技術(shù)目前存在一些問題。根據(jù)我最近發(fā)表的這篇 stackoverflow 帖子,Querying with two array with firestore security rules答案建議將“ids”添加到對象中,鍵為id,值簡單地為“true”。我已經(jīng)完成了這個,現(xiàn)在我的結(jié)構(gòu)看起來像這樣:這給我留下了這個查詢:db.collection('Depots')  .where(`products.${productId}`, '==', true)  .where(`users.${userId}`, '==', true)  .where('created', '>', 1585998560500)  .orderBy('created', 'asc')  .get();這個查詢讓我拋出一個錯誤,要求創(chuàng)建一個索引:查詢需要索引。您可以在這里創(chuàng)建它:...但是,這會嘗試索引特定的對象鍵,即QXooVYGBIFWKo6Cso products.QXooVYGBIFWKo6C。這當然不是我想要的,因為這個查詢會發(fā)生變化,并且可能有無數(shù)種可能性,這意味著我必須為每個鍵條目創(chuàng)建另一個索引才能查詢它。有沒有辦法解決這個問題?我假設(shè)由于查詢中使用了不同的運算符,它需要索引這個查詢,所以我想知道這個問題是否有任何解決方法。非常感謝您提前。
查看完整描述

3 回答

?
慕標5832272

TA貢獻1966條經(jīng)驗 獲得超4個贊

您在這里擁有的是一個地圖字段,通常應該自動為其創(chuàng)建索引。

這確實意味著您將擁有與產(chǎn)品一樣多的索引,這意味著:

  1. 您可以擁有的產(chǎn)品數(shù)量受到限制,因為每個文檔最多有 40,000 個索引條目

  2. 您為每個文檔支付更多費用,因為您為每個索引的存儲付費。

如果這些不是您想要的,您將不得不切換回您的原始模型,并使用您在那里的查詢限制。似乎沒有適合您的兩個要求的解決方案。


查看完整回答
反對 回復 2022-06-05
?
藍山帝景

TA貢獻1843條經(jīng)驗 獲得超7個贊

在我們聊天討論之后,這是我建議的起點。誰知道最終架構(gòu)會是什么樣子,但我認為這個或非常接近這個。您說一個用戶可以同時存在于多個倉庫中,并且多個倉庫可以同時包含相同的產(chǎn)品。您還說過,一個倉庫在給定時間永遠不能擁有超過 40 個用戶,因此 40 個用戶的數(shù)組肯定不會侵犯 Firestore 的文檔1,048,576字節(jié)限制。


[collection]

    <documentId>

        - field: value


[depots]


    <UUID>

        - depotId: string       "depot456"

        - productCount: num     5,000


    <UUID>

        - depotId: string       "depot789"

        - productCount: num     4,500



[products]


    <UUID>

        - productId: string     "lotion123"

        - depotId: string       "depot456"

        - users: [string]       ["user10", "user27", "user33"]


    <UUID>

        - productId: string     "lotion123"

        - depotId: string       "depot789"

        - users: [string]       ["user10", "user17", "user50"]



[users]


    <userId>

        - depots: [string]      ["depot456", "depot999"]


    <userId>

        - depots: [string]      ["depot333", "depot999"]

在 NoSQL 中,存儲很便宜,并且計算不會像使查詢成為可能和高效(快速且便宜)所需的那樣對數(shù)據(jù)進行非規(guī)范化。


要在單個查詢中查找所有 depot,其中user10和lotion123都為真,請查詢產(chǎn)品集合 where productIdequalsx和usersarray-containsy并從這些結(jié)果中收集depotId值。如果您想為其他內(nèi)容保留數(shù)組包含操作,則必須進一步對數(shù)據(jù)進行非規(guī)范化(替換單個用戶的數(shù)組)?;蛘撸梢詫⒋瞬樵儾鸱譃閮蓚€單獨的查詢。


使用此模型,當用戶離開倉庫時,獲取users數(shù)組包含該用戶的所有產(chǎn)品并將其userId從數(shù)組中刪除。當用戶加入倉庫時,獲取所有depotId等于的產(chǎn)品x并將其附加userId到數(shù)組中。


觀看此視頻以及 Rick 的其他視頻,以深入了解 NoSQL:https ://www.youtube.com/watch?v=HaEPXoXVf2k


查看完整回答
反對 回復 2022-06-05
?
喵喵時光機

TA貢獻1846條經(jīng)驗 獲得超7個贊

如果您不確定用戶和產(chǎn)品的數(shù)量,那么您的數(shù)據(jù)庫結(jié)構(gòu)似乎不適合這種情況,因為 firestore 文檔存在大小和長度限制。您應該為產(chǎn)品和用戶創(chuàng)建單獨的集合,即規(guī)范化您的數(shù)據(jù)并在產(chǎn)品集合中為用戶提供參考。


User : 

       {

          userId: documentId,

          name: John,

          ...otherInfo

       }


Product : 


       {

          productId: documentId,

          createdBy: userId,

          createdOn:date,

          productName:"exa",

          ...otherInfo

       }

這樣,文檔的大小將受到限制,即如果您不確定大小,請嘗試避免在 firestore 中使用地圖/數(shù)組。此外,在這種情況下,查詢的數(shù)量會增加,但在這種情況下您不需要很多索引。


查看完整回答
反對 回復 2022-06-05
  • 3 回答
  • 0 關(guān)注
  • 175 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號