在Firebase中找到要获取的数据时,如何停止forEach?

时间:2019-08-16 01:23:20

标签: javascript node.js firebase promise google-cloud-firestore

我想从Firebase获取数据。但是我知道Firebase使用forEach来搜索数据库中的数据。

  db.collection('users').get()
  // eslint-disable-next-line promise/always-return
    .then((snapshot) => {
      snapshot.forEach((doc) => {
        console.log(doc.id, '=>', doc.data());
        myData.push(doc.data().first);
      });

      const title = myData.find( e => e === 'Dennis');
      res.render('index', {title});
      // return null;
    })
    .catch((err) => {
      console.log('Error getting documents', err);
    });

您可以看到forEach将搜索数据库中的每个doc.data().first。 但是我认为这是一种在数据库中搜索数据的非常低效的方式。我希望forEach在找到要获取的数据时停止。

1 个答案:

答案 0 :(得分:2)

根据DataSnapshot.forEach的API文档,无法终止循环。即使可以,它仍然会从查询中读取每个匹配的文档。这意味着无论forEach发生什么,您都仍将每个文档都传输到客户端。

如果您想提高效率,请仅查询您知道要接收的文档。对于您的情况,如果要查找某个特定字段包含字符串“ Dennis”的文档,则应仅查询那些文档,如documentation中所述。