How to move a document in Cloud Firestore?

前端 未结 2 1206
迷失自我
迷失自我 2020-11-28 14:04

Can someone help me how to rename, move or update document or collection names in Cloud Firestore?

Also is there anyway that I can access my Cloud Firestore to updat

2条回答
  •  再見小時候
    2020-11-28 14:21

    Here's another variation for getting a collection under a new name, it includes:

    1. Ability to retain original ID values
    2. Option to update field names

        $(document).ready(function () {
    
            FirestoreAdmin.copyCollection(
                'blog_posts',
                'posts'
            );
    
        });
    

    =====

    var FirestoreAdmin = {
    
        // to copy changes back into original collection
        // 1. comment out these fields
        // 2. make the same call but flip the fromName and toName 
        previousFieldName: 'color',
        newFieldName: 'theme_id',
    
        copyCollection: function (fromName, toName) {
    
            FirestoreAdmin.getFromData(
                fromName,
                function (querySnapshot, error) {
    
                    if (ObjectUtil.isDefined(error)) {
    
                        var toastMsg = 'Unexpected error while loading list: ' + StringUtil.toStr(error);
                        Toaster.top(toastMsg);
                        return;
                    }
    
                    var db = firebase.firestore();
    
                    querySnapshot.forEach(function (doc) {
    
                        var docId = doc.id;
                        Logr.debug('docId: ' + docId);
    
                        var data = doc.data();
                        if (FirestoreAdmin.newFieldName != null) {
    
                            data[FirestoreAdmin.newFieldName] = data[FirestoreAdmin.previousFieldName];
                            delete data[FirestoreAdmin.previousFieldName];
                        }
    
                        Logr.debug('data: ' + StringUtil.toStr(data));
    
                        FirestoreAdmin.writeToData(toName, docId, data)
                    });
                }
            );
        },
    
        getFromData: function (fromName, onFromDataReadyFunc) {
    
            var db = firebase.firestore();
    
            var fromRef = db.collection(fromName);
            fromRef
                .get()
                .then(function (querySnapshot) {
    
                    onFromDataReadyFunc(querySnapshot);
                })
                .catch(function (error) {
    
                    onFromDataReadyFunc(null, error);
                    console.log('Error getting documents: ', error);
                });
        },
    
        writeToData: function (toName, docId, data) {
    
            var db = firebase.firestore();
            var toRef = db.collection(toName);
    
            toRef
                .doc(docId)
                .set(data)
                .then(function () {
                    console.log('Document set success');
                })
                .catch(function (error) {
                    console.error('Error adding document: ', error);
                });
    
        }
    
    }
    

    =====

    Here's the previous answer where the items are added under new IDs

            toRef
                .add(doc.data())
                .then(function (docRef) {
                    console.log('Document written with ID: ', docRef.id);
                })
                .catch(function (error) {
                    console.error('Error adding document: ', error);
                });   
    

提交回复
热议问题