我一直在努力弄清楚如何从子集合中删除文档,仅保留最新的5个文档。
我首先尝试获取子集合中的文档列表,并按'updated'
日期时间戳排序。但是,这将返回null
let updates = await firestore
.collection('spots')
.doc(spot.id)
.collection('spotupdates')
.orderBy('updated','desc');
然后我尝试从列表中删除最旧的,以确保只剩下5个
var cntr = 0;
while(updates.docs.length > 5){
await firestore
.collection('spots')
.doc(spot.id)
.collection('spotupdates')
.doc(updates[cntr].id)
.delete();
cntr++;
}
cntr = null;
请帮助-确实卡住了
答案 0 :(得分:0)
根据Firebase文档从数据库中删除数据:
要在Cloud Firestore中删除整个集合或子集合, 检索集合或子集合中的所有文档,以及 删除它们。如果您的收藏夹较大,则可能要删除 以较小的批处理文档,以避免内存不足的错误。重复 直到您删除了整个收藏集为止 子集合。
您可能会找到简化的代码段,以删除 this link 中的集合和子集合。
您还将在 this link 中找到有关在Firestore中删除字段,文档和集合的更多信息和详细示例。
让我知道这是否有帮助。
答案 1 :(得分:0)
我在我的应用上做了类似的事情,但基于你的数据结构
首先获取集合中的所有文档
const updates = await firestore
.collection('spots')
.doc(spot.id)
.collection('spotupdates')
.get()
映射文档数据返回一个数组
const updatesArray = updates.docs.map(doc => doc.data())
做逻辑然后删除
if (updatesArray.length > 5){
const sorted = updatesArray.sort((a,b) => b.created_at - a.created_at)
const oldest = sorted.pop()
await firestore
.collection('spots')
.doc(spot.id)
.collection('spotupdates').doc(oldest.id).delete()
}