簡體   English   中英

使用 firestore v9 執行復雜查詢

[英]Performing a complex query with firestore v9

我正在嘗試使用 firestore v9 執行復雜的查詢。 我的目的是從我的數據結構中獲取一些文檔(跳過和限制)。 我的意思是,我需要從一個文檔中獲取例如 5 個文檔 -> collections -> 文檔。 並且該文檔需要在該日期之前訂購。

在此處輸入圖像描述 在此處輸入圖像描述

因此,例如,假設在我的數組中我包含 2 個文檔 id ['e4z3HNyUCQbiYQRzfVO4RyebMCP2', 'WZImI6tl0IUFKbICEZzcciaUxKG2'] ,從這 2 個文檔中,我需要按創建日期排序他們的 userPosts,但我需要傳遞一個跳過也有限制。 因此,從這 2 個文檔中,我將限制獲取 3 個文檔,但是這 3 個文檔將來自我傳遞的 2 個帖子 ID。

在此處輸入圖像描述

 const queryBuild = await query(
    collection(db, 'posts'),
    where('userPosts', 'in', [`post.id`...]),
    collection(db, 'userPosts'),
    ...
  );
  const querySnapshot = await getDocs(queryBuild);

Firestore 沒有開箱即用的方法可以滿足您的需求。

您將需要發出兩個查詢,一個針對兩個父文檔中的每一個。


例如,假設您總共只需要來自兩個子集合的 3 個文檔。

您首先使用以下查詢查詢第一個子集合:

const q1 = query(collection(db, "posts/e4z3HNyUCQbiYQRzfVO4RyebMCP2/userPosts"), orderBy("creation", "desc"), limit(3));

然后使用以下查詢查詢第二個子集合:

const q2 = query(collection(db, "posts/WZImI6tl0IUFKbICEZzcciaUxKG2/userPosts"), orderBy("creation", "desc"), limit(3));

然后合並兩個結果(即將兩個QuerySnapshot的文檔推送到一個數組中),按creation值降序排列並取前三個。

Renaud 的答案的替代方法是將父文檔的postId存儲在每個userPost中。 這樣,您可以將in子句添加到集合組查詢中,以獲取最多 10 個父文檔的用戶帖子。

query(
  collectionGroup(db, "userPosts"), 
  orderBy("creation", "desc"), 
  where("parentPostId", "in", ["e4z3HNyUCQbiYQRzfVO4RyebMCP2", "WZImI6tl0IUFKbICEZzcciaUxKG2"]), 
  limit(3)
);

如果您有 10 個以上的 ID,則需要執行多個此類查詢,因此您將回到 Renaud 答案中類似的方法,只是 API 調用次數的 1/10。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM