【问题标题】:How to get firestore collection response in an Array?如何在数组中获得 Firestore 收集响应?
【发布时间】:2020-06-13 05:39:39
【问题描述】:

当我在云 Firestore 中查询时,有什么方法可以得到数组格式的响应? 我知道两种方法,但我想知道是否有任何其他方法直接与之相关

const queryRef = await db.collection('xyz').where('time','==',29).get()
const array = []
queryRef.forEach(doc => {
    array.push(doc.data())
})

还有其他类似的方式。

 const array2 = queryRef.docs.map(doc => doc.data());

有什么方法可以在不使用外部 javascript 方法的情况下获得相同的响应,如果可能的话,我如何计算满足查询的响应数量 喜欢

const queryRef = await db.collection('xyz').where('time','==',29).get()

在我执行或将其存储在数组中之前,我不知道在此查询中获得了多少文档

【问题讨论】:

    标签: javascript arrays node.js google-cloud-firestore


    【解决方案1】:

    您显示的代码均未使用“外部 javascript 方法”。您展示的 foreach 循环和 map() 都是非常标准的 JavaScript,并且都同样有效。事实上,这是我见过的使用 Firestore 查询结果的两种最常见的方式。我不清楚你为什么需要不同的东西。

    您有第二个问题,关于使用await 计算查询结果:

    const queryRef = await db.collection('xyz').where('time','==',29).get()
    

    该代码具有误导性,因为该查询的结果不是参考。这是QuerySnapshot。但是,如果您想要该对象的结果数量,只需访问生成的文档数组:

    const count = queryRef.docs.length
    

    Firestore 不提供在不进行查询的情况下对文档进行计数的方法。 SQL 中没有聚合函数。如果您需要不带查询的文档计数,则在向集合中添加和删除文档时,您必须自己维护文档计数。

    【讨论】:

    • 我知道,但有什么方法或方法可以解决这个问题吗?
    • 解决什么?请完整阅读我的答案。如果您正在寻找一种按照我的建议计算文档的方法,我认为您应该为此进行网络搜索。
    • 我明白你的意思,但使用这意味着我必须使用一个额外的变量,我想以更有效的方式编写这段代码。这就是我问这个问题的原因。如果可能的话,你能告诉我关于我的问题的任何方式
    • 关于我的第一个问题,我想问的部分已排序
    • 您现在的工作并没有什么低效的地方。如果您认为自己有性能问题,请对您的代码进行基准测试,并在进行更改之前找出性能问题的确切位置。
    猜你喜欢
    • 2021-06-19
    • 1970-01-01
    • 2020-12-25
    • 2019-09-08
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-20
    相关资源
    最近更新 更多