我是Firebase的新手,不知道如何更新一个集合中所有文档中的同一字段。
return db.collection('collection').get().then((snapshot) => {
return snapshot.forEach((doc) => {
doc.update({'field': 1});
});
})
.catch((err) => {
console.log('Error getting documents', err);
});
我正在firebase函数中运行此代码。没有任何错误,但什么都没有发生。我在文档中看不到任何关于这个特定问题的内容。有人知道怎么了吗?
您需要将所有update()
调用的结果返回给调用者,否则它无法知道所有异步操作何时完成:
return db.collection('collection').get().then((snapshot) => {
return Promise.all(snapshot.documents.map((doc) => {
return doc.ref.update({'field': 1});
}));
});
变化:
return
来自update()
的promise,以便它可以冒泡到Cloud Functions容器中- 使用
map
,这样我们就可以得到一系列承诺 - 然后使用
Promise.all
,这样我们只有在所有更新完成后才能完成(从而终止云功能(
这种方法对我来说很好……不知道这是否是一种正确的方法(正如我所说的,我是一个初学者(
exports.scheduledFunction2 = functions.pubsub.schedule('every 1 minutes').onRun((context) => {
return db.collection("collection")
.get()
.then(querySnapshot => {
if (!querySnapshot.empty) {
for(let i =0;i<querySnapshot.size;i++){
var queryDocumentSnapshotTest = querySnapshot.docs[i];
queryDocumentSnapshotTest.ref.update({'counter':1});
}
return null;
} else {
// do nothing
console.log("No document corresponding to the query!");
return null;
}
});
});