Javascript 如何从cloud firestore仅获取数据而不获取任何元数据?
是否可以仅从Cloud Firestore获取数据 现在,我正在从一个集合中提取所有文档,然后使用loop获取已保存到Firestore的唯一数据,如下所示:Javascript 如何从cloud firestore仅获取数据而不获取任何元数据?,javascript,firebase,google-cloud-firestore,Javascript,Firebase,Google Cloud Firestore,是否可以仅从Cloud Firestore获取数据 现在,我正在从一个集合中提取所有文档,然后使用loop获取已保存到Firestore的唯一数据,如下所示: const data = {}; const snap = await db.collection("rooms").where("ppl","array-contains", myUsername).get({source:"cache"}); for (let i = snap.size -1; i >= 0; i--){
const data = {};
const snap = await db.collection("rooms").where("ppl","array-contains", myUsername).get({source:"cache"});
for (let i = snap.size -1; i >= 0; i--){
const {room} = snap.docs[i].data();
const snapshot = await db.collection(`rooms/${room}/msgs`).orderBy("dt","desc").limit(50).get({source:"cache"});
const tempMessages = [];
if (len2 > 0) {
for (let k = 0; k < len; k++) {
tempMessages = [...tempMessages, snapshot.docs[k].data()];
}
}
data = { ...data, [room]: tempMessages};
}
setRoomsMessages(data);
const data={};
const snap=await db.collection(“rooms”).where(“ppl”,“array contains”,myUsername).get({source:“cache”});
对于(设i=snap.size-1;i>=0;i--){
const{room}=snap.docs[i].data();
const snapshot=await db.collection(`rooms/${room}/msgs`).orderBy(“dt”,“desc”).limit(50).get({source:“cache”});
常量tempMessages=[];
如果(len2>0){
for(设k=0;k
现在我想要什么
我只想获取snapshot.docs[k].data()的和数组(所需数据)
为什么?因为我想获取所需的
数据,然后直接将其传递到状态
。还有,我不需要两个嵌套循环,我只循环房间
,而不是每个房间的消息
,我不清楚你在这里想做什么。为什么要删除循环?这一点也不慢。查询过程中花费的大部分时间是客户端和服务器之间的往返。你不能加快速度。因为我有两个集合
一个用于用户
,一个用于消息
,所以我必须为嵌套两个,假设有50个用户
,我们为每个用户
获取50条消息,所以我们将面临50x50
循环,还有我的表演。因为即使从cache
列出消息也需要5秒钟。我知道snap.docs
是一个数组,但它有很多元数据。我想要这样的东西,但我已经将干净的数据存储到Firestore。我认为您可能正在尝试在出现实际性能问题之前进行优化。请编辑您的问题,以更清楚地显示什么比您希望的慢,以及您如何对代码进行基准测试。您的基准不应该包括执行查询所需的时间,因为您无法控制这一点。我不认为你会找到任何方法来优化简单的for循环。这个问题已经在这里得到了回答[1],但是,默认情况下,对firestore的查询会收取元数据费用。如果你想提高应用程序的性能,你可以优化firestore中存储的数据的结构[1]