Я не могу массово загружать данные в подкатегории firestore с автоматически созданными идентификаторами документов - PullRequest
0 голосов
/ 05 августа 2020

Я пытаюсь обновить данные внутри подгруппы с помощью firebase-admin sdk. Но данные не загружаются.

имя-коллекции -> auto-gen-do c -key -> sub-collection-name -> auto-gen-do c - 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
  }
]

1 Ответ

1 голос
/ 05 августа 2020

При настройке нескольких документов я бы рекомендовал использовать пакетную запись , поскольку, по моему опыту, документы, как правило, не обновляются / не устанавливаются, когда вы пишете более ~ 10 документов в одной функции.

Вот реализация со ссылкой на ваш код:

// 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);
    })
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...