首頁 > web前端 > js教程 > 批量使用Node.js將CSV文件導入MongoDB

批量使用Node.js將CSV文件導入MongoDB

Jennifer Aniston
發布: 2025-03-10 00:09:10
原創
240 人瀏覽過

這個話題對我來說是一個非常有趣的話題。在許多Web應用程序中,接受用戶輸入並將單個記錄保存到數據庫非常普遍。但是,當您的用戶(或您)想在單個命令中執行多個插入片段時,在本文中,我們將演示如何創建CSV模板和表格來上傳CSV文件,以及如何將CSV解析到一個or Save Mongodb Database。與mongodb。如果您不這樣做,我建議閱讀我的

首先要撰寫Mongodb和Node.js

文章的文章。本文介紹了Mongoose如何通過創建強大的模型來創建強大的模式來與MongoDB互動。如果您已經對Mongoose有很好的了解,那麼讓我們繼續進行。

入門開始,您將實例化一個新的node.js應用程序。在命令提示符中,導航到要託管node.js應用程序的位置並執行以下命令:使用

> flag

> flag意味著該項目在適當的位置初始化,因此該應用程序將以 index.js.js
mkdir csvimport<br>cd csvimport<br>npm init -y<br>
登入後複製
登入後複製
登入後複製
開始。在創建和解析CSV文件之前,我們需要先進行一些初始設置。我們希望將其作為Web應用程序;為此,您將使用Express軟件包處理所有Nitty-Gritty服務器設置。在您的命令提示符中,通過運行以下命令來安裝Express:

-y>由於此Web應用程序將通過Web表單接受文件,因此我們還將使用Express Sub-Package Express文件上傳。讓我們現在也安裝它:

npm install express --save<br>
登入後複製
登入後複製
登入後複製
>我們已經完成了足夠的初始配置來設置Web應用程序並創建一個基本的網頁,該網頁將在root Directory中創建一個文件上傳表單。

,創建一個

index.js.js.js
npm install express-fileupload --save<br>
登入後複製
登入後複製
登入後複製
文件,並添加以下代碼smippets。此文件設置了Web服務器。 

>

這個文件導入Exprests Express和Express文件上傳庫,配置Web應用程序以使用文件上傳,並在端口8080上聽。它還使用Express使用Express創建了一個路由,該路由將是Web應用程序的默認著陸頁。此路由返回一個包含Web表單的文件,該文件將允許用戶上傳CSV文件。 >您可以通過在終端中運行命令來啟動Web服務器:

var app = require('express')();<br>var fileUpload = require('express-fileupload');<br>var server = require('http').Server(app);<br> <br>app.use(fileUpload());<br><br>app.get('/', function (req, res) {<br>  res.sendFile(__dirname + '/index.html');<br>});<br>server.listen(8080, () => {<br>  console.log('Server started on port 8080')<br>})<br>
登入後複製
登入後複製
登入後複製

您應該在端口
node index.js<br>
登入後複製
服務器上啟動端口

808080 >>>。這意味著您已經成功地連接到Web服務器。 在根目錄中,創建

index.html

文件。該文件創建了用於上傳CSV文件的表單。

>此html文件包含兩個重要的東西:>
    >
  1. >/模板>單擊時,將下載一個可以用要導入的信息填充的CSV模板。
  2. >
  3. encTypemultipart/form-datafile> 設置為multipart/form-data>的表單和帶有類型的輸入字段的
  4. ext> ext ext ext ext> ext>的csv模板。當表單包含文件上傳時,是一種在HTML中使用的編碼方法。 當您訪問

批量使用Node.js將CSV文件導入MongoDB http:// localhost:8080/

>您會看到較早創建的表單。如果您閱讀了文章文章,則創建了作者模式。在本文中,您將重新創建此模式,並允許用戶大量將作者集合導入MongoDB數據庫。讓我們看一下作者模式。不過,在我們這樣做之前,您可能需要猜到了 - 我們需要安裝Mongoose軟件包:

mkdir csvimport<br>cd csvimport<br>npm init -y<br>
登入後複製
登入後複製
登入後複製

>創建模型和模型

>>

>>>>>>>>>>>>>>>
npm install express --save<br>
登入後複製
登入後複製
登入後複製

> >>>>>>>>>>>>>

>
npm install express-fileupload --save<br>
登入後複製
登入後複製
登入後複製
可以通過單擊模板鏈接下載的CSV模板。為了輔助CSV模板生成,我們將使用

JSON2CSV軟件包。此NPM軟件包將JSON帶有列標題和正確的行末端轉換為CSV。您將為模板路由的此新代碼附加到先前創建的index.js 文件:

>該代碼所做的第一件事是包含一個新的
var app = require('express')();<br>var fileUpload = require('express-fileupload');<br>var server = require('http').Server(app);<br> <br>app.use(fileUpload());<br><br>app.get('/', function (req, res) {<br>  res.sendFile(__dirname + '/index.html');<br>});<br>server.listen(8080, () => {<br>  console.log('Server started on port 8080')<br>})<br>
登入後複製
登入後複製
登入後複製
template.js

file(下一個下一步創建),並為/template 創建路由。此路由將在 template.js文件中調用A>函數。然後,它創建並導出一個函數。此函數接受來自Express Server的請求和響應對象。函數內部的get,您創建了要在CSV模板中包含的字段數組。這可以通過兩種方式之一來完成。第一種方法(在本教程中完成)是創建要包含在模板中的字段的靜態列表。第二種方法是通過從作者架構中提取屬性來動態創建字段列表。

第二種方法是使用以下代碼:>
mkdir csvimport<br>cd csvimport<br>npm init -y<br>
登入後複製
登入後複製
登入後複製
>

>使用動態方法是一個好主意,但是當您不想在CSV模板上包含多個屬性時,它會變得有些複雜。在這種情況下,我們的CSV模板不包括_idcreated>屬性,因為這些屬性將通過代碼填充。但是,如果您沒有要排除的字段,那麼動態方法也將起作用。

>

>使用定義的字段數組創建CSV Template

,您將使用

>軟件包從JavaScript對象創建CSV模板。此json2csv對象將是此路線的結果。 csv

>,最後,將使用來自Express服務器的>屬性,將設置兩個標頭屬性,該屬性將迫使下載

authors.csvresfile。您的Web瀏覽器,Web表單將顯示使用鏈接以下載模板。單擊鏈接以下載模板將允許您下載authors.csv 文件。該文件將在上傳之前填充。

>

在Microsoft Excel中打開模板文件,CSV文件應以此為基礎:

>這是填充的CSV文件的一個示例:

批量使用Node.js將CSV文件導入MongoDB

npm install express --save<br>
登入後複製
登入後複製
登入後複製

index.js

文件需要一些更新才能連接到mongoDB並創建一個新的帖子路由,該路由將使用數據庫連接和配置的新的帖子路由接受文件上傳:
npm install express-fileupload --save<br>
登入後複製
登入後複製
登入後複製

fast-csv,是時候分析CSV文件了。幸運的是,有幾個很棒的圖書館可以幫助完成這項工作。對於本教程,我們將使用可以使用以下命令安裝的

軟件包:
var app = require('express')();<br>var fileUpload = require('express-fileupload');<br>var server = require('http').Server(app);<br> <br>app.use(fileUpload());<br><br>app.get('/', function (req, res) {<br>  res.sendFile(__dirname + '/index.html');<br>});<br>server.listen(8080, () => {<br>  console.log('Server started on port 8080')<br>})<br>
登入後複製
登入後複製
登入後複製

post>創建了與模板路由相似的郵路路由,該模板路由從upload.js

文件中調用a

>函數。不必將這些函數放在單獨的文件中;但是,最好為這些路由創建單獨的文件,因為它有助於保持代碼良好和有條理。前三行包括解析並保存CSV數據所需的必要軟件包。

接下來,定義和導出了postindex.jsfile的函數。在此功能內部是魔術發生的地方。

該功能首先檢查請求主體中包含一個文件。如果沒有,則返回錯誤,指示必須上傳文件。

>

上傳文件後,對文件的引用保存到稱為authorFile>的變量。這是通過訪問數組中的files陣列和屬性來完成的。 file屬性匹配我的文件輸入名稱的名稱,該名稱在fileindex.html> example中首先定義。該數組將用於將數據保存到數據庫中。此功能將CSV文件作為字符串接受。該字符串是從屬性中提取的。

屬性包含上傳的CSV文件的內容。

authors>下一行包含兩個

函數的選項:

>> andfast-csv>。這些都設置為fromString。這告訴庫,CSV文件的第一行將包含標題,並且應忽略空行。 authorFile.data>data>使用配置的選項,我們設置了兩個偵聽器函數,這些函數在

>>事件和事件時被觸發。 CSV文件的每一行都調用一次

事件。此事件包含解析數據的JavaScript對象。 fast-csvheaders>該對像已更新以包含作者架構的ignoreEmpty屬性,並具有新的true>。然後將此對象添加到

陣列中。在事件回調函數內部,我們將在作者模型上調用

>函數,將data>的數組傳遞給它。 end>data如果發生錯誤試圖保存數組,則會拋出異常。否則,向用戶顯示了一條成功消息,指示已上傳並保存到數據庫中。

>

>數據庫架構應與此相似:_idObjectIdauthors>

如果您想查看完整的源代碼,則只能查看Github repository github Repository of github repository ofere oferation。上傳了幾個記錄。如果您的用例需要能夠上傳數千個記錄,那麼將記錄保存在較小的塊中可能是一個好主意。

這可以通過多種方式完成。如果要實現它,我建議更新data回調功能以檢查作者數組的長度。當數組超過您定義的長度時,例如100,在數組上調用Author.create>函數,然後將數組重置為空。然後將記錄保存在100的塊中。請務必將最終的create呼叫留在end回調功能中,以保存最終記錄。

享受!

>

已通過Mary Okosun的貢獻進行了更新。 Mary是位於尼日利亞拉各斯的軟件開發人員,在Node.js,JavaScript,MySQL和NoSQL Technologies中具有專業知識。 thumbnail用Openai dall-e。

以上是批量使用Node.js將CSV文件導入MongoDB的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板