我有一个测试设置,其中使用 mongoimport
和 mongoexport
命令填充现有的 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所述。 。
基本上,我发现的问题是我的父进程在没有等待子进程完成执行的情况下就退出了,因为 spawn
和 exec
都是异步函数。所以我修改了我的代码如下:
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/