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

使用mongoimport导入JSON文件时重复键仅首个对象被导入的问题

问题根源:JSON规范不允许重复键名

兄弟,这可不是mongoimport的bug,本质是JSON规范本身就禁止对象中存在重复的键名。当解析工具碰到重复键时,不同实现会有不同的处理逻辑——在你的场景里,解析器直接保留了第一个"b"对应的对象,把后面同名的键值对直接忽略了,所以导入到MongoDB后自然看不到第二个"b"的内容。

你提供的原始JSON里就存在这个问题:

{ "timestamp":"100", "layers":{ "a":{ "aa":"0", "ab":"1", "ac":"2" }, "b": { "ba":"0", "bb":"1", "bc":"2" }, "b": { "missing": "1", "missing2": "2" } } }

layers对象下有两个完全相同的"b"键,这本身就不符合JSON语法规则,在导入前的解析阶段就已经丢失了第二个b的数据,和MongoDB的导入工具无关。

两种可行的修复方案

要解决这个问题,你得先把JSON调整为合法结构,这里给你两种常用思路:

方案1:将重复的b改为数组

如果这两个b对象是同类型的条目,最合理的做法是把它们放到一个数组里,修改后的JSON如下:

{ "timestamp":"100", "layers":{ "a":{ "aa":"0", "ab":"1", "ac":"2" }, "b": [
    { "ba":"0", "bb":"1", "bc":"2" },
    { "missing": "1", "missing2": "2" }
  ] } }

导入后,layers.b会变成一个包含两个对象的数组,你查询时就能看到所有预期内容。

方案2:给重复键添加唯一后缀

如果这两个b是不同类型的实体,只是命名重复,直接给它们改个唯一的键名即可:

{ "timestamp":"100", "layers":{ "a":{ "aa":"0", "ab":"1", "ac":"2" }, "b1": { "ba":"0", "bb":"1", "bc":"2" }, "b2": { "missing": "1", "missing2": "2" } } }

这样导入后,两个对象会以b1和b2的键名分别存在,不会被互相覆盖。

验证修复结果

修改好JSON后,重新执行你的导入命令:

mongoimport --db myDB --collection myCollection --file abc.json

再执行查询语句:

db.myCollection.find().limit(1)

这时候就能看到所有你想要的内容啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:11:23