Firestore子集合删除文档中最旧的

时间:2019-10-21 18:55:09

标签: javascript firebase google-cloud-firestore

我一直在努力弄清楚如何从子集合中删除文档,仅保留最新的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;

请帮助-确实卡住了

2 个答案:

答案 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()
        }