javascript - 云函数 cron 作业:如何管理嵌套集合的数据
问题描述
我想使用云函数 cron 作业触发对嵌套集合数据的计划任务。
我想要实现的是,如果“limit”字段中的时间戳值晚于当前时间,则“status”字段将在嵌套集合中添加值“expired”。
父集合名称为“OrdersUser”,子集合名称为“Orders”。我想管理“订单”集合中的文档。
计划任务每隔一分钟运行一次。
部署后,我在 firebase 控制台中遇到错误。
id 未定义。
我想我可以在云函数中使用通配符,所以我使用 {id} 来引用嵌套文档。但我做不到。
我想查询“订单”集合中的所有数据。我该如何解决这个问题?
const functions = require('firebase-functions')
const admin = require('firebase-admin')
admin.initializeApp()
const db = admin.firestore()
const ref = functions.firestore
exports.statusOrdersUser = functions.runWith( { memory: '2GB' }).pubsub.schedule('* * * * *').onRun((context) => {
// Consistent timestamp
const now = admin.firestore.Timestamp.now();
// Query all documents ready to perform
//id is not defined.
const queryOrdersUser = db.collection('OrdersUser').doc({id}).collection('Orders').where('limit', '<=', now)
return queryOrdersUser.get()
.then(querySnapshot => {
if (querySnapshot.empty) {
return null;
} else {
const promises = []
querySnapshot.forEach(doc => {
promises.push(doc.ref.update({ status: 'expired' }));
});
return Promise.all(promises);
}
});
})
解决方案
Firestore 不支持文档 ID 的通配符操作。如果要查询子集合,则需要提供嵌套的文档的具体 ID。目前尚不清楚您的函数应该如何确切地知道要查询哪个子集合,因为它不接收任何参数或具有任何上下文。
如果要查询所有名为“Order”的子集合,无论它们嵌套在数据库中的任何位置,都可以使用集合组查询。
推荐阅读
- python - 另一列的“以前见过”列
- java - 使用“AnnotationProcessorOnCompilePath”进行 Lombok 和 Gradle Linting 项目
- swift - 将带有 unicode 字符的字符串保存到 CoreData 失败
- javascript - 如何在 D3 鼠标悬停中添加文本?
- node.js - 将数据放在 ServersideProps 上
- javascript - 列中的随机选择
- python - 即使矩形没有接触,Pygame 也会不断打印碰撞
- c - 检查 char 数组中的字符是否为整数 | 脚本
- excel - 尝试从单元格中为变量分配日期时间时出错
- android - AOSP:仅在应用程序上静音麦克风,而不是在整个设备上静音