【问题标题】:Can I change the name of a document in Firestore?我可以更改 Firestore 中文档的名称吗?
【发布时间】:2018-06-01 19:50:05
【问题描述】:

我目前正在开发一个应用程序,我必须从 Google 的 Firestore 中检索数据。

我的数据结构是这样的:

users
 - name@xxx.com
    - more data

有没有办法让我将 name@xxx.com 更改为仅名称? 我看不到更改文档名称的方法。

【问题讨论】:

标签: swift google-cloud-firestore


【解决方案1】:

您可能会意识到您应该为集合中的所有 Firebase 文档使用自动生成的 ID,而现在您想要更改集合中的文档 ID(“collection_name”)并且还想存储他们以前的IDs 作为新文档中的新字段(“prevID”)然后您可以执行以下操作:-

FirebaseFirestore firebaseDb;
ArrayList<Map<String,Object>> data = new ArrayList<>();
firebaseDB.collection("collection_name").get.addOnSuccessListener(
    queryDocumentSnapshots -> {
    for (DocumentSnapshot d : queryDocumentSnapshots) {
        Map<String,Object> map = d.getData();
        map.put("prevID", d.getId());
        data.add(map);
    }
    for(Map<String, Object> d : data){
        Task<DocumentReference> dd = firebaseDb.collection("collection_name").add(d);
                dd.addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
                    @Override
                    public void onSuccess(DocumentReference documentReference) {
                        firebaseDb.collection("collection_name").document((String) d.get("prevID")).delete();
                    }
                });
    }
});

【讨论】:

    【解决方案2】:

    我认为最好的方法是从“name@xxx.com”获取数据并将其上传到一个名为“name”的新文档中,然后删除旧文档。

    举个例子:

    const firestore = firebase.firestore();
    // get the data from 'name@xxx.com'
    firestore.collection("users").doc("name@xxx.com").get().then(function (doc) {
        if (doc && doc.exists) {
            var data = doc.data();
            // saves the data to 'name'
            firestore.collection("users").doc("name").set(data).then({
                // deletes the old document
                firestore.collection("users").doc("name@xxx.com").delete();
            });
        }
    });
    

    【讨论】:

    • 这种方法在数据库使用/成本方面是否“有效”?
    • 这是目前最有效的方法,因为确实没有其他选择。此操作将同时计为读取和写入。
    • 注意:这只会复制文档的顶级数据,您将丢失该文档中的所有子集合。
    猜你喜欢
    • 1970-01-01
    • 2011-05-31
    • 2017-08-14
    • 2011-10-03
    • 2018-01-20
    • 2012-01-17
    • 1970-01-01
    • 2019-12-11
    • 1970-01-01
    相关资源
    最近更新 更多