Firebase:如何在没有父键的子集合中获取文档



我需要执行查询以获取子集合中最老的文档。我希望尽可能少的读取来执行这个查询。德国联邦铁路(DB)描述:基于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));

如果设备集合中的字段是唯一的,那么您可以首先获取该设备的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() ]

相关内容

  • 没有找到相关文章

最新更新