You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 22:48:02