Ruby生成JSON导入MongoDB失败:集合为空如何解决?
解决Ruby脚本导入JSON到MongoDB集合为空的问题
排查及修复方案
验证JSON解析结果
先确认ActiveSupport::JSON.decode(my_json_files)输出的是合法的MongoDB文档格式,打印解析后的数据排查:parsed_data = ActiveSupport::JSON.decode(my_json_files) puts parsed_data.inspect注意MongoDB文档的键不能以
$开头或包含.,否则插入会静默失败。如果解析结果是多个文档的数组,要确保格式正确。确认MongoDB连接有效性
检查客户端初始化代码是否指向正确的数据库和集合,比如:client = Mongo::Client.new(['localhost:27017'], database: 'your_target_db') collection = client['your_target_collection'] # 验证连接 puts "当前连接数据库: #{client.database.name}"如果开启了认证,要在初始化时加入
user和password参数。使用驱动推荐的插入方法
旧版insert方法已被废弃,改用对应方法适配数据格式:- 单文档插入:
result = collection.insert_one(parsed_data) puts "插入文档ID: #{result.inserted_id}" # 输出ID确认成功 - 多文档数组插入:
result = collection.insert_many(parsed_data) puts "插入文档ID列表: #{result.inserted_ids}"
- 单文档插入:
捕获插入异常
插入失败可能抛出异常但被脚本忽略,添加异常捕获获取具体错误:begin result = collection.insert_one(parsed_data) puts "插入成功" rescue Mongo::Error => e puts "插入失败原因: #{e.message}" end常见错误包括权限不足、文档字段非法、连接超时等。
验证YAML转JSON的完整性
先将生成的JSON写入本地文件,用mongoimport命令手动测试导入,排除数据本身的问题:mongoimport --db your_target_db --collection your_target_collection --file generated.json --jsonArray
内容的提问来源于stack exchange,提问作者JACKoJONS
相关产品推荐
相关产品推荐

