Windows 10 WSL环境下通过Docker运行JS脚本填充MongoDB失败怎么办
问题原因及解决方案
第一:脚本执行方式错误
你写的use ulaval是MongoDB交互式Shell的专属命令,不属于原生JavaScript语法,直接通过node运行该脚本会直接报语法错误。正确执行方式如下:- 删掉脚本第一行的
use ulaval语句 - 使用MongoDB官方Shell工具
mongosh执行脚本,命令参考:
mongosh "mongodb://127.0.0.1:27017/ulaval" import_script.js上述命令会直接连接到
ulaval库并执行插入逻辑,不需要额外写use语句切换库。- 删掉脚本第一行的
第二:WSL环境网络连通问题
你使用WSL环境运行命令,若MongoDB容器是运行在Windows侧的Docker Desktop中,需要确认两点:- Docker Desktop已经开启了WSL集成,你在WSL中执行
docker ps能看到容器说明集成正常,否则需要先在Docker Desktop设置中开启对应WSL发行版的集成开关 - 启动MongoDB容器时已经配置了端口映射,启动参数需要包含
-p 27017:27017,否则WSL环境无法通过本地端口访问容器内的MongoDB服务
你可以在WSL中执行nc -zv 127.0.0.1 27017验证端口连通性,返回succeeded说明网络正常。
- Docker Desktop已经开启了WSL集成,你在WSL中执行
第三:脚本语法优化
建议将脚本中的db.professeurs.insert替换为db.professeurs.insertMany,该方法是MongoDB专门用于批量插入文档的API,兼容性和可读性更好,避免不同版本MongoDB的语法兼容问题。
修改后的脚本参考:
db.professeurs.insertMany( [{ "prenom":"Etienne", "nom":"Marceau", "cours":"ACT-3000", "faculte":"fsg", "ecole":"ulaval", "cours_derniere_session":["ACT-7002","ACT-2001"] }, { "prenom":"Jean-Thomas", "nom":"Baillargeon", "cours":"GLO-4035", "faculte":"fsg", "ecole":"ulaval", "age":32 }, { "prenom":"Julie", "nom":"Langevin", "faculte":"fmd", "ecole":"ulaval" }, { "prenom":"Richard", "nom":"Khoury", "faculte":"fsg", "ecole":"ulaval", "cours_derniere_session":["GLO-7027"] }, { "prenom":"Luc", "nom":"Lamontagne", "cours":"IFT-7022", "faculte":"fsg", "ecole":"ulaval" }, { "prenom":"Philippe", "nom":"Gregoire", "cours":"GSF-2103", "faculte":"fsa", "ecole":"ulaval" }, { "prenom":"Philippe", "nom":"Gregoire", "cours":"GSF-2103", "faculte":"fsa", "ecole":"ulaval" }] )
内容的提问来源于stack exchange,提问作者codejourney
相关产品推荐
相关产品推荐

