我有一个使用 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/