我有以下情況:我有一個使用MongoDB的Node.js應用程序,因此使用Docker Compose,我可以有兩個容器:一個用於Node應用程序,另一個用於MongoDB。如何使用Docker Compose在容器中運行命令?
現在,該應用程序必須支持以下功能:可以上傳csv
文件,該文件將使用mongoimport
導入到Mongo中。
使用Node,運行mongoimport
很容易,因爲我們有exec
函數。也就是說,它會做這樣的事情的問題:
const exec = require('child_process').exec;
exec('mongoimport -d database -c collection --type csv file.csv', function (error, stdout, stderr) {
// Other stuff here...
});
唯一的問題是:mongoimport
將不可用,因爲MongoDB是比節點應用的另一個容器內!
現在該如何解決?我想通過exec使用ssh在Mongo容器上運行它,但我不確定它。
如何從節點應用程序將mongoimport
運行到Mongo容器中?
您可以在Node.js容器中安裝mongo工具/客戶端以使用mongoimport並指定MongoDB主機。但似乎沒有exec的基於Node的解決方案可能會更清潔。部分取決於您對csv數據和這些文件的性質(大小,複雜程度等)所做的工作。 – ldg
由於效率的原因,我避免了基於節點的解決方案。我正在導入一個類似250千行或更多行的文件。使用mongoimport,數據幾乎是瞬間導入的,而使用Node.js則需要一些時間。現在,要安裝這些mongo工具,我需要向dockerfile添加一些'apt-get'語句? – user1620696
是的 - 如果工作很繁重,另一種方法是爲它創建一個服務,也就是與Node應用共享一個卷的容器(因此它可以獲取文件)和構建規範(Dockerfile),其中包括mongoimport和一個小應用程序,它允許您與Node應用程序(http或pub/sub等)進行通信。這個模型很好,你可以從你的主應用程序和數據庫中抽象出實際的功能(mongoimport,無論)。 – ldg