使用 Javascript/Node.js 在代码中执行 mongoimport

Posted

技术标签:

【中文标题】使用 Javascript/Node.js 在代码中执行 mongoimport【英文标题】:Executing mongoimport inside code with Javascript/Node.js 【发布时间】:2013-03-04 10:23:18 【问题描述】:

node.js/javascript 中是否有任何库允许个人在代码中使用mongoimport

据我了解,mongoimport 有点像 .exe,您必须先执行它才能使用它的文本输入环境。

是否可以在我的代码中执行 mongoimport,然后在我的代码中直接解析我需要的任何命令?

我目前的算法涉及:

fs.appendFile('log.txt',JSON.stringify(obj, null, 2));

obj 是一个对象,它指定使用 node.js 的 res 方法(请求 HTTP 响应)解析成 JSON.stringify 的函数

var obj = ;
obj.url = hostNames[i];
obj.statusCode = res.statusCode;
obj.headers = res.headers;

然后我使用 mongoimport 将此 JSON 文档导入我的 MongoDB。

mongoimport --host localhost -db scrapeapp -collection scrape --file log.txt --jsonArray

这种方法显然效率低下。我想一次性完成所有这些步骤。

帮助赞赏

【问题讨论】:

你看过 MongoDB node.js 驱动吗?如果您想直接从 node.js 服务与 MongoDB 对话,这就是您想要使用的。文档在这里:docs.mongodb.org/ecosystem/drivers/node-js 为了扩展詹姆斯所说的,我认为你对 mongoimport 的用途有一些误解。您与 mongodb 的大部分交互都将通过驱动程序进行。该驱动程序允许您通过特定语言(在本例中为 javascript)在数据库中插入、更新和删除文档(对象)。 Mongoimport 不应该用于您的数据库中的正常插入,它主要用于导入从其他来源(如其他数据库或应用程序)导出的数据。 你是对的。我目前对 MongoDB 的使用确实存在误解。我目前正在从几个(数千个)站点中抓取标题,然后我将在几个月后对其进行分析。我将更改我的算法以逐个标头执行 insert() 标头,而不是执行导入。你怎么看? db.scrape.insert(JSON.stringify(obj,null,2)); 是的,你需要插入:) 【参考方案1】:

这就是我在代码中的做法

let exec = require('child_process').exec
let command = 'mongoimport -d database -c collection --file import.json'
exec(command, (err, stdout, stderr) => 
  // check for errors or if it was succesfuly
  cb()
)

我执行 mongoimport 命令,然后在代码旁边传递 cb 以使其可访问,或者如果您不使用异步样式,您可以与 child_process.execSync(command[,options]) 同步执行它

【讨论】:

【参考方案2】:

我绝不是节点专家 - 但如果您有现有的 JSON 文件,您可以按照 here 或各种 answers 中所述的 shell 命令在 Node 中执行 mongoimport。

【讨论】:

他说他知道这一点。他在问如何在 JavaScript 而不是 mongo shell 中做相当于 mongoimport 的操作。 他问“是否可以在我的代码中执行 mongoimport”。我链接到的第一篇文章的标题是“使用 Node.js 执行 Unix 命令”——所以从技术上讲,这是可行的。但我知道这可能不是他在效率方面的想法。

以上是关于使用 Javascript/Node.js 在代码中执行 mongoimport的主要内容,如果未能解决你的问题,请参考以下文章

Node.js的一些基本概念

javascript node.js next()

nodeJS安装使用

Javascript - Node.js - 防止函数的多次执行

如何使用 Node.js/JavaScript 合并两个按键值匹配的数组值

在Javascript(node.js,express.js,ejs)中访问服务器端变量[关闭]