如何在Mongo Shell脚本中导入JavaScript对象
方案1:Shell层面直接拼接文件内容(最稳妥,无需适配Mongo Shell语法)
你当前的run.sh本身就是通过cat命令把JS文件内容拼到--eval参数里执行,直接把mock.js也加入拼接序列即可:
CONNECTION_STRING="mongodb://localhost:27017/" mongo --nodb --eval "var connectionString=\"$CONNECTION_STRING\"; `cat mock.js mongo-initialize.js`"
唯一需要做的是修改mock.js兼容双场景使用:如果你的mock.js现在只有Node.js导出逻辑(比如module.exports = data),补充环境判断即可同时满足API调用和Mongo Shell执行的需求:
// mock.js 完整内容示例 const data = [ // 你的mock数据 { name: "测试数据1", value: 123 }, { name: "测试数据2", value: 456 } ] // 仅在Node.js环境执行导出逻辑 if (typeof module !== 'undefined' && module.exports) { module.exports = data }
拼接后mock.js的内容会先执行,data变量会直接暴露在当前作用域,mongo-initialize.js里可以直接使用,不需要任何导入逻辑。
方案2:修复load()方法的报错问题
你用load()报错的核心原因是mock.js里的Node.js导出语法(module.exports/export)在Mongo Shell环境下不存在对应全局对象,执行直接抛出异常。
只要按上面方案1的要求给mock.js加上环境判断,避开在Mongo Shell环境执行导出逻辑,就可以直接在mongo-initialize.js里用load()加载文件:
// mongo-initialize.js 开头添加 load('./mock.js') // 这里写mock.js的相对/绝对路径 conn = new Mongo(connectionString); db = conn.getDB("dbName"); db.createCollection("collection"); db["collection"].insertMany(data);
内容的提问来源于stack exchange,提问作者Jarwish Roshan
相关产品推荐
相关产品推荐

