簡體   English   中英

Firestore 讀取文檔按距離排序的限制

[英]Firestore read documents limitation for sorting by distance

我正在用 React Native 創建一個應用程序,顯示你附近的餐館和企業。 我開始在 Firebase 實時數據庫上創建它,但我在那里非常有限,這就是我決定使用 Firestore 的原因。 但目前我已經閱讀了付款條件。

我的問題是我總是只顯示我所在地區的餐館。 我的數據庫中有 2,000 多家公司。 但我在 FlatList 中有按距離排序。 因此,每次我加載一個列表時,總是從數據庫中檢索所有 2,000 份文檔,總體而言,文檔閱讀量和因此我支付的金額增長非常快。 這同樣適用於加載 map 上的所有餐廳。你知道如何做到這一點並且總是限制只顯示 20 個但要使距離排序有效嗎?

現在我在代碼中排序。 有沒有其他方法可以限制閱讀文件? 這段代碼讀取的都是2000多條。

const Restaurants = () => {
  const [restaurants, setRestaurants] = useState([]);
  const fetchRestaurants = async () => {
    const querySnapshot = await getDocs(collection(db, "restaurants"));
    querySnapshot.forEach((doc) => {
      setRestaurants({
          name: doc.data().name,
          lat : doc.data().lat,
          lng : doc.data().lng,
      })
    });
  };
  useEffect(() => {
    fetchRestaurants();
  }, []);
  return (
    <View style={{ marginTop:18 }}>
      <FlatList
        data={restaurants.sort((a,b) => {
          const aDist = Fce.getDistance(+a.lat,+a.lng)
          const bDist = Fce.getDistance(+b.lat,+b.lng)
          return aDist - bDist;
        })}
        keyExtractor={(item)=>item.id}
        renderItem={({ item }) => (
          <View style={{ marginRight:13 }}>
            <Text>Data</Text>
          </View>
        )}
      />
    </View>
  );
}
  1. 你能過濾:按距離,類別,......
  2. 您可以使用 cursor 以便對結果進行分頁: https://firebase.google.com/docs/firestore/query-data/query-cursors
  3. 將查詢結果限制為 30: https://firebase.google.com/docs/firestore/query-data/order-limit-data

如果你實施地理散列,就有可能獲得某個地理范圍內的文件。 Firebase 文檔中有關實現地理查詢的內容對此進行了解釋。

不過,這仍然不允許您獲取離某個位置最近的 N 個文檔。 這種類型的查詢在 Firestore 上根本不可能,因為它需要數據庫本身進行距離計算,而它不支持。

暫無
暫無

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

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