【问题标题】:Get First Element from Collection and delete it从集合中获取第一个元素并将其删除
【发布时间】:2019-07-07 01:44:03
【问题描述】:

我需要从 Firebase 集合中获取第一个元素,然后将其删除,但不知道该怎么做。我需要它来实现云功能。

await ref
      .doc(ref.limit(1).get().docs[0]);

【问题讨论】:

  • “集合”下考虑什么数据结构?请提供一些您处理的数据示例
  • 您是否希望将其从 javascript 集合(数组、对象)中删除。那么你可以试试这个 collection.shift();集合 - 这里是数组。
  • 意味着一个 Firebase 集合@bohkoval
  • 您需要定义什么是“第一个”元素。根据您添加的字段的值,集合中的文档没有您选择的顺序。
  • 所以我必须从第一个元素中获取文档 ID?我该怎么做?

标签: javascript firebase google-cloud-firestore google-cloud-functions


【解决方案1】:

Bokhkoval 的整体逻辑,如他/她的回答中所示是正确的,但是答案与 实时数据库 有关,而 OP 正在使用 Firestore(来自他的问题中使用的标签)。

假设您“具有 [您] 可以排序的时间戳属性”,正如您在下面的评论中所说,在 Cloud Function 中,您将为 Firestore 执行以下操作:

return admin.firestore().collection("yourCollection")
.orderBy("yourTimestamp", "desc")
.limit(1)
.get()
.then(querySnapshot => {
    if (!querySnapshot.empty) {
        //We know there is one doc in the querySnapshot
        const queryDocumentSnapshot = querySnapshot.docs[0];
        return queryDocumentSnapshot.ref.delete();
    } else {
        console.log("No document corresponding to the query!");
        return null;
    }
});

【讨论】:

  • 谢谢!我只是不知道如何获取参考或 ID...
【解决方案2】:

您需要在所需元素上调用delete() 方法。

Firebase 集合不是有序数据类型,因此不存在“第一个元素”这样的概念。但是您可以add() 一些标志(例如时间戳)来区分首先添加了哪个元素。 Firebase 集合本身没有任何内置标志来将元素检测为“第一”。

例如,如果您有时间戳标志:

var collection = firebase.database().ref('/path/to/collection');
var collectionLast = collection.orderByChild('timestamp').limit(1);
var listener = collectionLast.on('child_added', function(snapshot) {
    snapshot.ref.remove();
});
  1. 获取集合参考
  2. 按时间戳排序元素(将按升序进行),限制为第一个元素
  3. 当从集合中检索到此元素时,child_added 事件会通过快照负载触发并将其删除。

另外,如果您需要云功能,请关注value事件。您需要将第 3 步更改为以下代码;

collectionLast.once('value', function(snapshot) {
    var updates = {};
    snapshot.forEach(function(child) {
      updates[child.key] = null
    });
    return ref.update(updates);
  });

有关更多信息,您可以获取文档:https://firebase.google.com/docs/database/admin/retrieve-data

【讨论】:

  • 我有一个可以排序的时间戳属性,但我不知道如何删除该元素。
猜你喜欢
  • 1970-01-01
  • 2021-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-02
  • 1970-01-01
  • 2017-03-11
相关资源
最近更新 更多