我有一个名为users的firestore集合,每个用户都有一个生成的id和一个字段分数:
users
0e8X3VFL56rHBxxgkYOW
score : 4
3SeDjrgAWMmh3ranh2u
score : 5我使用redux-firestore并希望将所有用户的得分重置为0,如下所示
firestore.update({ collection: 'users' }, { score : 0 }我无法做到这一点,因为更新方法需要一个文档id
你知道怎么做吗?
发布于 2018-07-24 01:32:33
您可以获取集合中的所有文档,获取它们的id并使用这些id执行更新:
db.collection("cities").get().then(function(querySnapshot) {
querySnapshot.forEach(function(doc) {
doc.ref.update({
capital: true
});
});
});发布于 2018-08-22 15:59:35
出于某种奇怪的原因,公认的答案( thehamzarocks )对我不起作用,所有文档都没有更新。也许AngularFire2中有个bug。无论如何,我决定循环遍历QuerySnapshot的docs数组,而不是使用它的forEach方法,并将每个更新添加到一个批处理队列中。批处理批量操作也比为每个更新操作发送新的更新请求更有效。
resetScore(): Promise<void> {
return this.usersCollectionRef.ref.get().then(resp => {
console.log(resp.docs)
let batch = this.afs.firestore.batch();
resp.docs.forEach(userDocRef => {
batch.update(userDocRef.ref, {'score': 0, 'leadsWithSalesWin': 0, 'leadsReported': 0});
})
batch.commit().catch(err => console.error(err));
}).catch(error => console.error(error))
}发布于 2019-12-26 12:45:11
批量更新很好,但请记住,每个事务最多只能更新500个文档。如果这个重置不是经常做的,那么最简单的方法可能是:
async function resetScores() {
const collection = await db
.collection("users")
.get()
collection.forEach(doc=> {
doc.ref
.update({
score: 0
})
})
}https://stackoverflow.com/questions/51481192
复制相似问题