我需要執行查詢以獲取子集合中最舊的檔案。我想以盡可能少的讀取來執行此查詢。資料庫描述:基于 Firebase。設備的集合。每個設備都擁有一個回呼集合。對于特定設備,我需要獲取最早的回呼(回呼具有時間戳)。
我想我知道如何使用設備唯一 ID 執行此查詢,但我想通過按設備的某些欄位進行過濾來實作,該欄位也是唯一的。我能夠通過使用他的所有回呼查詢設備來做到這一點,但這將向我收取比實際需要更多的讀取費用。
使用 ID 的查詢:
admin
.firestore()
.collection("devices/{device_id}/callbacks")
.{order_by_timestamp}
.limit(1)
.get()
.then((data) => {
let callbacks = [];
data.forEach((doc) => {
callbacks.push(doc.data());
});
return res.json(callbacks);
})
.catch((err) => console.error(err));
uj5u.com熱心網友回復:
如果設備集合中的該欄位是唯一的,那么您可以先獲取該設備的 ID,然后繼續執行現有邏輯,如下所示:
async function getOldestCallback(thatFieldValue) {
const device = await admin.firestore().collection("devices").where("thatField", "==", thatFieldValue).get()
if (device.empty) return false;
const deviceId = device[0]["id"];
// existing function
}
這應該引起 2 次讀取(1 次用于設備檔案,1 次用于最舊的回呼(如果存在)。
此外,由于您將要回傳的檔案數量限制為 1,因此您可以使用[0]代替 forEach 回圈。
const callbacks = [ data[0].data() ]
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/334743.html
標籤:节点.js 火力基地 谷歌云firestore 收藏
