簡體   English   中英

Node JS讀取文件插入到mongo db

[英]Node JS read file insert to mongo db

我有一個包含此內容的文本文件

title: A, alert: notice, desc: Starting
title: B, alert: notice, desc: Process Step 1 and 2
 Step 1 - Execute
 Step 2 - Log
title: C, alert: notice, desc: "Ending"

我想用這種格式將它插入到我的 mongo 數據庫中

{
 title: A,
 alert: notice,
 desc: Starting
},
{
 title: B,
 alert: notice,
 desc: Process Step 1 and 2 Step 1 - Execute Step 2 - Log
},
{
 title: C,
 alert: notice,
 desc: Ending
},

我一直在嘗試尋找可以提供幫助的節點包,但幾乎所有文件閱讀器包都只能讀取文件而不允許逐行編輯。 例如,如果下一行縮進,它應該與上一行合並。

const fs = require('fs');
const rl = require('readline');
const mongoose = require('mongoose');

let readline = [];
let readlinesplit = [];
let finalarrobj = [];
let keyarr = [
  'variable',
  'identification',
  'value',
  'unit',
  'status',
  'date',
  'time'
];
let splitline = [];
let filenamearr = []
let getfile;
let scSchema = new mongoose.Schema(
  {
    variable: {
      type : String
    },
    identification: {
      type : String
    },
    value: {
      type : String
    },
    unit: {

    },
    status: {
      type : String 
    },
    date: {
      type: Date
    },
    time: {
      type: Date
    }  
  }
)
const SC = mongoose.model('SC', scSchema);

try {
  fs.readdir('D:/scnner_data/public', (err, data) => {
    if (err) throw err;
    data.forEach((element) => {
      if (element.match(/SC/)) {
        filenamearr.push(element);
      }
    });
    filenamearr.map(async (element) => {
      getfile = fs.createReadStream(`public/${element}`);
      readline = rl.createInterface({
        input: getfile,
        crlfDelay: Infinity 
      });
      for await (let line of readline) {
        splitline.push(line.split('\n'));
      };
      splitline.forEach((element) => {
        readlinesplit.push(element[0].split(';'));
      });
      for (let i = 0; i < readlinesplit.length; i++) {
        readobj = {};
        for (let j = 0; j < keyarr.length; j++) {
          readobj[keyarr[j]] = readlinesplit[i][j];
        };
        finalarrobj.push(readobj);
      };
      try {
        SC.insertMany(finalarrobj);
        console.log('data inserted for SC');
      } catch (error) {
        throw  error.message;
      }
    });
  })
} catch(e) {
   throw e.message
}

您可以使用這種方法來讀取您的目錄和存儲數據這只是將數據從文本文件插入數據庫的基本方法。 我希望這對你有幫助

這將是一個兩步過程。 第一個是解析你的文件。 它似乎沒有任何通用標准(據我所知),因此您可能需要自己編寫。

第二部分是將文件寫入 mongodb。這是一個單獨的問題,但如果您按照文檔進行操作,它會相當簡單。 我建議你嘗試這些事情,然后再問你是否有任何問題。

編輯:這是解析為 js object 的文件: https://jsfiddle.net/cyksd7o3/

 var fileInput = 'title: A, alert: notice, desc: Starting\ntitle: B, alert: notice, desc: Process Step 1 and 2 Step 1 - Execute Step 2 - Log \ntitle: C, alert: notice, desc: "Ending"'; var parseFile = function(input){ var rows = input.split('\n'); var returnObj = []; for (var i=0; i < rows.length; i++){ var currRow = rows[i]; returnObj.push(getDataObject(currRow)); } return returnObj; }; var getDataObject = function(inputRowString){ var newObject = {}; var propSplit = inputRowString.split(','); for (var i = 0; i < propSplit.length; i++){ var currSplit = propSplit[i]; var keyValue = currSplit.split(':'); newObject[keyValue[0].replace(/\s/g,'')] = keyValue[1]; } return newObject; }; console.dir(parseFile(fileInput));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM