微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 node.js 进行 Firestore、查询和更新

如何解决使用 node.js 进行 Firestore、查询和更新

我需要一个每天自动触发一次的云函数,并在我的“用户”集合中查询“监视”字段为真并将所有这些都更新为假。部署我的函数时,我在终端中收到“13:26 错误解析错误:意外令牌 MyFirstRef”这个错误。 我对 js 不熟悉,所以任何人都可以请更正函数。谢谢。

belongsTo($related,$foreignKey = null,$ownerKey = null,$relation = null)

解决方法

您的代码中有几点需要更正:

  • 当所有异步作业完成时,您需要返回一个 Promise。有关详细信息,请参阅此 doc
  • 如果使用 await 关键字,则需要声明函数 async,请参阅 here
  • QuerySnapshot 有一个 forEach() 方法
  • 您只需使用 ref 属性即可从 DocumentReference 获取文档的 QuerySnapshot

因此,以下内容应该可以解决问题:

exports.changeWatched = functions.pubsub.schedule("every 24 hours").onRun(async (context) => {  // <== See async
    const db = admin.firestore();
    const batch = db.batch();
    const snapshot = await db.collection("users").where("watched","==",true).get();

    snapshot.forEach(doc => {
        batch.update(doc.ref,{ watched: false });
    });

    return batch.commit();  // Here we return the Promise returned by commit()

});

请注意,我们使用了一个 batched write,它最多可以包含 500 个操作。如果您需要在一次 Cloud Function 执行中更新更多文档,请使用 Promise.all() 或将该批次分成几批。


Promise.all() 版本:

exports.changeWatched = functions.pubsub.schedule("every 24 hours").onRun(async (context) => {  // <== See async
    const db = admin.firestore();

    const snapshot = await db.collection("users").where("watched",true).get();

    return Promise.all(snapshot.docs.map(doc => doc.ref.delete());
    
});

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?