使用自动生成的密钥批量上传/导入Firebase

sai*_*aif 6 json firebase firebase-realtime-database

我需要使用Firebase控制台的"导入JSON"实用程序上传大量数据.但我无法为每一行启用自动生成密钥,如-Kop90 .... 但相反,它创建了0,1 ..键.

这是我的样本数据

[
{"date":1448323200,"description":"test data1","amount":1273},
{"date":1448323200,"description":"25mm pipes","amount":2662}
]
Run Code Online (Sandbox Code Playgroud)

我想生成这样的东西

自动生成密钥的数据

dyl*_*ker 0

我也遇到了和你类似的问题

我最终找到了一个使用 JS 和 Node 的 firestore 的好解决方案:https://www.youtube.com/watch? v=Qg2_VFFcAI8&ab_channel=RetroPortalStudio

但由于我需要它用于实时数据库,我只是稍微修改了一下以满足我的需求:

先决条件:

  1. JS SDK安装:https://firebase.google.com/docs/web/setup ?authuser=0#add-sdk-and-initialize
  2. 使用 SDK 版本 8(命名空间)[可以轻松更改以在 v9 中使用]

脚步:

  1. 在项目根目录中创建名为files的文件夹:
  2. 添加所有 json 文件,如下所示:

在此输入图像描述

  1. 将以下代码添加到文件中(在此示例中,文件名为“uploader.js”):

注意:下面的代码中唯一缺少的是 firebaseConfig obj,您可以按照本指南获取此 obj:https://support.google.com/firebase/answer/7015592#zippy=%2Cin-this-article

var firebase = require("firebase/app");
require("firebase/database");

const firebaseConfig = {
  // your config details...
};

firebase.initializeApp(firebaseConfig);
const database = firebase.database();

// File directory details:
const path = require("path");
const fs = require("fs");
const directoryPath = path.join(__dirname, "files");

fs.readdir(directoryPath, function(err, files) {
  if (err) {
    return console.log("Unable to scan directory: " + err);
  }

  files.forEach(function(file) {
    var lastDotIndex = file.lastIndexOf(".");

    var items = require("./files/" + file);

    var listRef = database.ref(`${file.substring(0, lastDotIndex)}/`);

    items.forEach(function(obj) {
      var postRef = listRef.push();
      
      postRef.set(obj)
      .then(function(docRef) {
        console.log("Document written");
      })
      .catch(function(error) {
        console.error("Error adding document: ", error);
      });

    });
  });
});
Run Code Online (Sandbox Code Playgroud)

  1. 最后,打开终端到可以找到uploader.js 的目录并运行:

运行该操作后,每个文件都成为一个集合,每个文件的所有内容都以唯一的pushId列出:

在此输入图像描述