web-dev-qa-db-ja.com

最初の要素をコレクションから取得して削除します

FireBaseコレクションから最初の要素を取得してから削除する必要がありますが、それを実行する方法を理解することはできません。クラウド機能に必要です。

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

彼/彼女の答えに提示されているBohkovalの全体的な論理は正しいですが、答えはRealtime Databaseと関連がありますが、OPは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;
    }
});
 _
7
Renaud Tarnec

目的の要素のdelete()メソッドを呼び出す必要があります。

Firebase Collectionは順序付けられていないデータ型であるため、「最初の要素」と同じ概念はありません。しかし、あなたは最初にどの要素を追加したかを区別するために、add()いくつかのフラグ(たとえばタイムスタンプ)を備えています。 FireBase Collection自体は、要素を「First」として検出するための組み込みフラグを持っていません。

たとえば、タイムスタンプフラグがある場合

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);
  });
 _

詳細については、Doc : https://firebase.google.com/docs/database/admin/retrieve-data

1
bohkoval