我有一个测试设置,其中使用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
知道我要去哪里哪里吗?
答案 0 :(得分:1)
因此,我能够通过here中所述的稍微不同的方法来解决执行mongo命令的问题。
基本上,我发现的问题是我的父进程正在退出而没有等待子进程完成执行,因为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()函数时,我的收藏集已成功删除。
有人知道这种方法或更好的方法有什么问题吗?