javascript - 如何按用户/最近的 geohash 的位置对 firestore db 中的数据进行排序?

标签 javascript firebase google-cloud-firestore

我有一个使用 Firebase 用 React Native 编写的应用程序,我在数据库中有一个带有 geohashes 的客户端列表,现在我需要向用户显示从最近到最远排序的客户端列表。在文档示例中,它说

    const q = db.collection('cities')
      .orderBy('geohash')
      .startAt(b[0])
      .endAt(b[1]);

但是问题是我的 firebase 对象上没有 .collection,我像这样实例化它

import { initializeApp } from "firebase/app";
import { Firestore, getFirestore } from "firebase/firestore";
import Constants from "expo-constants";

let firestore;
if (Constants.manifest?.extra) {
  const {
    FIREBASE_API_KEY,
    FIREBASE_APP_ID,
    FIREBASE_AUTH_DOMAIN,
    FIREBASE_MESSAGING_SENDER_ID,
    FIREBASE_PROJECT_ID,
    FIREBASE_STORAGE_BUCKET,
  } = Constants.manifest.extra;

  const firebaseConfig = {
    apiKey: FIREBASE_API_KEY,
    authDomain: FIREBASE_AUTH_DOMAIN,
    projectId: FIREBASE_PROJECT_ID,
    storageBucket: FIREBASE_STORAGE_BUCKET,
    messagingSenderId: FIREBASE_MESSAGING_SENDER_ID,
    appId: FIREBASE_APP_ID,
  };

  const app = initializeApp(firebaseConfig);
  firestore = getFirestore();
}
export default firestore as Firestore;

在示例中,Firebase 数据库的实例化如下

db = firebase.firestore(app);

但是没有要从“firebase/firestore”导入的 firebase 对象

如何按用户位置对数据库中的数据进行排序?

谢谢。

最佳答案

您开始使用的示例代码使用 Firebase SDK 版本 8 及更低版本的命名空间语法。不过,您的代码正在导入 Firebase SDK 版本 9 或更高版本,它使用新的模块化语法。

如果我们采用此 v8 代码:

const q = db.collection('cities')
  .orderBy('geohash')
  .startAt(b[0])
  .endAt(b[1]);

v9 中的等效内容是:

import { collection, query, orderBy, startAt, endAt } from "firebase/firestore";
...
const q = query(collection(q, 'cities'), 
  orderBy('geohash'),
  startAt(b[0]),
  endAt(b[1])
);

我通常会将 Firebase 文档放在方便的地方以便进行此类代码翻译,例如 ordering and limiting data 部分并排包含 v8 和 v9 语法的示例。阅读v9 upgrade guide也总是一个好主意。

更新 (2023-07-19):performing geoqueries on Firestore 的文档刚刚更新以包含具有模块化语法的代码示例。

关于javascript - 如何按用户/最近的 geohash 的位置对 firestore db 中的数据进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70864193/

相关文章:

javascript - 使用 ng-model 将数组中的选择列表发布到服务器

javascript - Strophe 在进入房间之前检索信息

firebase - 为什么 flutter 会为类内的 Firestore 方法返回错误,但在小部件内却很好?

javascript - Firebase - 无法嵌套集合的集合

firebase - 无法更改 flutter 的功能区域

javascript - 基于原始对象创建新对象的最简单方法,但没有一些字段

javascript - 输入意外结束 - 在 Express/Node App 上 curl JSON

swift - Firebase iOS Swift 身份验证 API_UNAVAILABLE(macCatalyst) 问题

java - ANDROID Firebase数据库 : Unable to save object

javascript - 在react-native中使用firebase重定向登录用户