我有以下情况:我有一个使用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