我正在尝试访问文档以对其进行更新,但是 集合中只有一个文档 ,我不知道该文档的ID,如何知道那里有w
时,我可以访问它吗?return admin.firestore().collection('users').doc(uid).collection('score').doc().update({
points: admin.firestore.FieldValue.increment(10),
})
此代码不起作用,出现错误:没有要更新的文档。
我理解这是因为调用.doc()方法只会生成一个随机ID。那么我该如何访问该文档?
答案 0 :(得分:0)
如果您不知道文档的ID,则不能仅get()
单独进行操作。您将必须对其所在的集合执行查询。如果执行查询,则要么必须了解其中的一个字段,然后filter才能知道(可能会得到许多匹配的文档),否则您将只需在集合上根本不提供任何过滤器就可以简单地获取集合中的每个文档。
没有解决方法。您确实必须做些事情来记住该文档ID,或者了解其字段。
答案 1 :(得分:0)
admin.firestore().collection('users').doc(uid).collection('score').get().then(snapshot => {
const docId = snapshot[0].id;
return
admin.firestore().collection('users').doc(uid).collection('score').doc(docId).update({
points: admin.firestore.FieldValue.increment(10),
})
})
这仅适用于集合中的一个文档。 snapshot [0] .data()。id返回第一个文档ID。
答案 2 :(得分:0)
仅当您知道Firestore文档的确切路径时,才可以更新该文档。如果您尚不知道路径,则必须阅读文档才能确定。
如果要更新集合中的所有文档,则意味着您可以仅调用集合中的get()
来获取所有文档。即使只有一个文档,您仍然必须更新所有文档。
代码看起来像这样:
let collectionRef = admin.firestore().collection('users');
collectionRef.get().then(snapshot => {
snapshot.forEach(doc => {
doc.update({
points: admin.firestore.FieldValue.increment(10),
})
});
})
.catch(err => {
console.log('Error getting documents', err);
});
另请参阅getting all documents in a collection的文档。
如果您在Cloud Function或其他无法处理承诺的环境中使用此功能,则需要充实结果:
let collectionRef = admin.firestore().collection('users');
return collectionRef.get().then(snapshot => {
return Promise.all(snapshot.documents.map(doc => {
return doc.update({
points: admin.firestore.FieldValue.increment(10),
})
}));
})