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

如何在Ruby中将同一产品ID的多个JSON存入MongoDB单文档

解决Ruby中同一产品ID的多个JSON文件存入MongoDB单文档的问题

问题分析

你需要将同一产品ID对应的多个JSON文件集中存储到MongoDB的单个文档中,核心需求是通过产品ID匹配文档,将每个JSON对象追加到文档的数组字段里。你的现有代码存在语法和逻辑问题,导致$push操作无法生效。

关键错误修正

  1. 数据库连接参数错误:拼写错误:dtaabase应为:database,同时要指定正确的数据库名test_db和集合名test_coll。
  2. 更新操作语法错误:Ruby MongoDB驱动需使用update_one(单文档更新),参数需严格遵循「查询条件、更新操作、选项」的结构。
  3. 冗余JSON转换:JSON.parse(json_array.to_json)属于无效操作,直接使用解析后的Ruby哈希即可。

修正后的实现代码

1. 基础连接与单个JSON文件处理

require 'mongo'
require 'json'

# 初始化MongoDB客户端
client = Mongo::Client.new(['127.0.0.1:27017'], database: 'test_db')
coll = client[:test_coll]

# 读取并解析单个JSON文件
json_content = File.read('path/to/your/product.json')
json_data = JSON.parse(json_content)

# 获取产品ID(根据你的JSON结构调整字段名)
single_id_product = json_data['product_id']

# 执行更新:匹配id字段,将当前JSON数据追加到json_files数组
coll.update_one(
  { id: single_id_product },
  { '$push': { json_files: json_data } },
  upsert: true
)

2. 批量处理多个JSON文件

如果需要批量处理目录下所有对应产品ID的JSON文件,可使用目录遍历:

require 'mongo'
require 'json'

client = Mongo::Client.new(['127.0.0.1:27017'], database: 'test_db')
coll = client[:test_coll]

# 遍历指定目录下的所有JSON文件
Dir.glob('./product_jsons/*.json').each do |file_path|
  json_data = JSON.parse(File.read(file_path))
  product_id = json_data['product_id'] # 替换为你实际的产品ID字段

  # 更新或插入文档:不存在则创建,存在则追加JSON到数组
  result = coll.update_one(
    { id: product_id },
    { '$push': { json_files: json_data } },
    upsert: true
  )

  # 可选:打印操作日志
  puts "文件 #{file_path}: #{result.upserted_id ? '创建新文档' : '更新现有文档'}"
end

最终MongoDB文档结构

执行后,每个产品ID对应的文档结构如下:

{
  "_id": ObjectId("60d21b4667d0d8992e610c85"),
  "id": "PROD-001",
  "json_files": [
    { "product_id": "PROD-001", "name": "产品A", "price": 100 },
    { "product_id": "PROD-001", "stock": 50, "category": "电子产品" }
  ]
}

补充说明

  • $push操作会将新的JSON对象追加到json_files数组末尾,确保同一产品ID的所有JSON数据都存储在单个文档中。
  • upsert: true参数确保当匹配的产品ID文档不存在时,自动创建新文档并插入第一条JSON数据。

内容的提问来源于stack exchange,提问作者JACKoJONS

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 16:33:42