node.js - Mongodb Shell命令执行通过nodejs删除集合

标签 node.js mongodb

我有一个测试设置,其中使用 mongoimportmongoexport 命令填充现有的 mongoDB 数据库,例如文件夹 testDump 中的 testDB。 最初填充 testDB 然后恢复的文件夹中的空文件会出现此问题。

例如。 testDump 中名为 abcInstance.json 的集合文件为空。

$ cat abcInstance.json
[]

现在,当我运行一些测试时,该集合会填充到 testDB 中,但最后当我使用 mongoimport 命令从 testDump 文件夹中恢复所有集合时,它会因空文件而失败。

因此,我尝试使用 mongo 和 spawn 命令删除这些集合。

if (statSync(collectionFile).size === 4) {
const options = [
  'testDB',
  '--eval',
  '"db.abcInstance.drop()"'
];
const dropDB = spawn('mongo', options, { stdio: 'inherit' });
if (dropDB.status !== 0) {
  throw new Error('failed to drop collection ');
}}

但这也失败了,我无法找出错误。 我已经测试过相同的命令在命令行上成功运行:

$ mongo testDB --eval "db.abcInstance.drop()"
MongoDB shell version v3.6.4
connecting to: mongodb://127.0.0.1:27017/alyneKickStartDB
MongoDB server version: 3.6.4
true

知道我哪里出错了吗?

最佳答案

因此,我能够通过稍微不同的方法解决执行 mongo 命令的问题,如here所述。 。

基本上,我发现的问题是我的父进程在没有等待子进程完成执行的情况下就退出了,因为 spawnexec 都是异步函数。所以我修改了我的代码如下:

const { promisify } = require('util');
const exec = promisify(require('child_process').exec)
async func test () {
    const res = await exec('mongo testDB --eval "db.abcInstance.drop()" --quiet')
    return { res }
}

现在,当我调用这个 test() 函数时,我的集合已成功删除。

有人知道这种方法有什么问题或更好的方法吗?

关于node.js - Mongodb Shell命令执行通过nodejs删除集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51984953/

相关文章:

node.js - pdfmake - fs.readFileSync 不是函数错误

mongodb - 我应该对我的 MongoDB 中的所有集合进行分片还是只分片一些

node.js - 我应该如何保证涉及金融交易操作的数据库的一致性

javascript - 为什么我需要写 JSON.parse(JSON.stringify(data))?

javascript - $从文档中的数组中提取

javascript - 将任何起始字符实例替换为空字符串

javascript - NodeJS - 解析 JSON(仅字符串或数字)

node.js - 在 Mongoose 中为对象数组创建索引

php - 如何在 laravel 中聚合 mongodb 集合数据

mongodb - 如何将 MongoDB 集合转换为以元素值为键的对象?