我无法使用自动生成的文档 ID 将数据批量上传到 firestore 子集合

I'm not able to bulk upload data to firestore sub-collections with auto-generated document IDs

我正在尝试使用 firebase-admin sdk 更新子集合中的数据。但是,没有上传数据。

collection-name --> auto-gen-doc-key --> sub-collection-name --> auto-gen-doc-key --> datas

const admin = require('./node_modules/firebase-admin');
const serviceAccount = require("./serviceAccountKey.json");

const data = require("./data.json");
const collectionKey = "movies"; //name of the collection
const documentKey = "my-document-key";
const subCollectionKey = "listItem";

admin.initializeApp({
    credential: admin.credential.cert(serviceAccount),
    databaseURL: "https://my-database-url.firebaseio.com"
});

const firestore = admin.firestore();
const settings = { timestampsInSnapshots: true };
firestore.settings(settings);

if (data && (typeof data === "object")) {
    Object.keys(data).forEach(docKey => {
        firestore
            .collection(collectionKey)
            .doc(documentKey)
            .collection(subCollectionKey)
            .doc()
            .set(data[docKey])
            .then((res) => {
                console.log("Document " + docKey + " successfully written!");
            })
            .catch((error) => {
                console.error("Error writing document: ", error);
            });
    });
}

data.json 我尝试上传的文件,因为下面给出了子集合的文档。

[
  {
    "pr": 1,
    "vi": "zAVmwt_U4c0",
    "vn": "Dumdaar Khiladi",
    "vd": "Watch #DumdaarKhiladi New Released Hindi Dubbed Full Movie Starring #RamPothineni, #AnupamaParameswaran",
    "vvc": 210279385,
    "tc": 517508
  },
  {
    "pr": 2,
    "vi": "R7aCOI4DuA0",
    "vn": "A Aa",
    "vd": "Watch & Enjoy #AAa New Hindi Dubbed Full Movie. Starring #Nithiin, #Samantha and #Anupama Parameshwaran. ",
    "vvc": 206297429,
    "tc": 372399
  },
  {
    "pr": 3,
    "vi": "ta7HoZFRKJQ",
    "vn": "Supreme Khiladi-2",
    "vd": "#HindiMovies #SouthMovie #SupremeKhiladi2#SaiDharamTej, #Anupama\nPresenting South (Sauth) Indian Movies Dubbed In Hindi Full Movie 2018 New (Hindi Movies, South Movie 2018, 2018 New Hindi Dubbed Movie) Supreme Khiladi 2 (Tej I Love U ).Starring #SaiDharamTej , #Anupama,  Exclusively on Aditya Movies - Telugu & Hindi.",
    "vvc": 148817263,
    "tc": 534333
  }
]

设置多个文档时,我建议使用 batch writes,因为根据我的经验,当您在一个函数中编写超过 ~10 个文档时,文档往往不会得到 updated/set。

参考您的代码实现如下:

// IMPORT
const admin = require('./node_modules/firebase-admin');
const serviceAccount = require("./serviceAccountKey.json");
const data = require("./data.json");

// VAR DECLARATION
const collectionKey = "movies"; //name of the collection
const documentKey = "my-document-key";
const subCollectionKey = "listItem";

// INIT
admin.initializeApp({
    credential: admin.credential.cert(serviceAccount),
    databaseURL: "https://my-database-url.firebaseio.com"
});
const firestore = admin.firestore();
const settings = { timestampsInSnapshots: true };
firestore.settings(settings);

// UPLOADING
if (data && (typeof data === "object")) {
    // CREATE BATCH WRITE
    var batch = firestore.batch();
    var path = collectionKey + "/" + documentKey + "/" + subCollectionKey;
    var id;

    // PRECREATE ID AND INSERT OPERATION INTO BATCH.
    data.forEach(dat =>{
        id = firestore.collection(path).doc().id;
        batch.set(firestore.collection(path).doc(id), dat);
    })

    // COMMIT THE OPERATIONS, MIGHT WANT TO CONVERT THIS TO AN ASYNC AWAIT FUNCTION TO ENSURE THIS FUNCTION FINISHES.
    batch.commit().then(res=>{
        console.log("COMMIT SUCCESSFUL!");
        return;
    }).catch(e=>{
        console.log(e.message);
    })
}