Получить первый элемент из коллекции и удалить его - PullRequest
0 голосов
/ 13 февраля 2019

Мне нужно получить первый элемент из коллекции Firebase, а затем удалить его, но я не могу понять, как это сделать.Мне это нужно для облачной функции.

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

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Общая логика Богковала, представленная в его / ее ответе, верна, однако ответ связан с Базой данных реального времени , тогда как ОП работает с Firestore (из теговиспользуется в его вопросе).

Предполагая, что у вас "есть свойство метки времени, которое [вы] можете сортировать по", как вы сказали в комментарии ниже, в облачной функции вы должны сделать следующее для 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;
    }
});
0 голосов
/ 13 февраля 2019

Вам необходимо вызвать метод 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. get collectionссылка
  2. упорядочение элементов по отметке времени (это будет сделано в порядке возрастания), ограничение первым элементом
  3. при извлечении этого элемента из коллекции, событие child_added инициируется с полезной нагрузкой моментального снимкаи удалите его.

Также, если вам это нужно для облачной функции, обратите внимание на событие value.Вам нужно изменить третий шаг на следующий код:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...