最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

如何在Firebase Node.js中按特定标准对文档进行计数?

IT培训 admin 13浏览 0评论

如何在Firebase Node.js中按特定标准对文档进行计数?

我想用javascript中的firebase nodejs实现云功能,以计算具有其属性之一的特定值的文档数。我正在寻找这样的东西:

exports.countDocumentsWithSpecificProp= functions.https.onCall((data, context)=>{
    var num = admin.firestore().collection('users').where("propToCheck", "==", data["propToCheck"]).length;
    return num;
});

其中'propToCheck'是用户属性,并记录我从应用程序中给出的参数。

回答如下:

您拥有的代码接近可行的代码。这将满足您的要求:

exports.countDocumentsWithSpecificProp= functions.https.onCall(async (data, context)=>{
    const snap = await admin.firestore().collection('users').where("propToCheck", "==", data["propToCheck"]).get();
    return {count: snap.docs.length};
});

但是,这会为每个与查询匹配的文档产生完整文档阅读次数,并相应地向您收费。它可能效率不高,而且,如果您谈论的是成千上万或更多的文档,那么它太昂贵且太慢而无法成为合理的解决方案。

通常,在Firestore中,您需要在编写文档时动态增加计数器。例如,您可以通过在创建文档时增加计数来将计数存储在单独的集合中。在一个简化的示例中:

exports.countPropToCheck = functions.firestore.document('users/{userId}').onCreate(async (snap, context) => {
  const valueToCount = snap.get('propToCheck');
  await admin.firestore().collection('propToCheckCounts')
    .doc(valueToCount).update({count: admin.firestore.FieldValue.increment(1)});
});

exports.countDocumentsWithSpecificProp = functions.https.onCall(async (data, context)=>{
    const snap = await admin.firestore().collection('propToCheckCounts').doc(data["propToCheck"]).get();
    return snap.data();
});

这里的警告是,显然,您必须提前知道要计算该字段上的内容。另一个警告是,不能保证函数只能执行一次,因此,如果您需要非常精确的计数,则需要定期手动重新计数。

有关在Firestore中进行计数的更多信息,请参见分布式计数器上的these docs。>>

如何在Firebase Node.js中按特定标准对文档进行计数?

我想用javascript中的firebase nodejs实现云功能,以计算具有其属性之一的特定值的文档数。我正在寻找这样的东西:

exports.countDocumentsWithSpecificProp= functions.https.onCall((data, context)=>{
    var num = admin.firestore().collection('users').where("propToCheck", "==", data["propToCheck"]).length;
    return num;
});

其中'propToCheck'是用户属性,并记录我从应用程序中给出的参数。

回答如下:

您拥有的代码接近可行的代码。这将满足您的要求:

exports.countDocumentsWithSpecificProp= functions.https.onCall(async (data, context)=>{
    const snap = await admin.firestore().collection('users').where("propToCheck", "==", data["propToCheck"]).get();
    return {count: snap.docs.length};
});

但是,这会为每个与查询匹配的文档产生完整文档阅读次数,并相应地向您收费。它可能效率不高,而且,如果您谈论的是成千上万或更多的文档,那么它太昂贵且太慢而无法成为合理的解决方案。

通常,在Firestore中,您需要在编写文档时动态增加计数器。例如,您可以通过在创建文档时增加计数来将计数存储在单独的集合中。在一个简化的示例中:

exports.countPropToCheck = functions.firestore.document('users/{userId}').onCreate(async (snap, context) => {
  const valueToCount = snap.get('propToCheck');
  await admin.firestore().collection('propToCheckCounts')
    .doc(valueToCount).update({count: admin.firestore.FieldValue.increment(1)});
});

exports.countDocumentsWithSpecificProp = functions.https.onCall(async (data, context)=>{
    const snap = await admin.firestore().collection('propToCheckCounts').doc(data["propToCheck"]).get();
    return snap.data();
});

这里的警告是,显然,您必须提前知道要计算该字段上的内容。另一个警告是,不能保证函数只能执行一次,因此,如果您需要非常精确的计数,则需要定期手动重新计数。

有关在Firestore中进行计数的更多信息,请参见分布式计数器上的these docs。>>

发布评论

评论列表 (0)

  1. 暂无评论