假设我有以下两个JSON,我想将它们导入到同一个集合中,而无需合并或更新现有文档。有没有办法,在导入过程中忽略现有的_id键,最后得到一个包含下面示例中所有6个文档的集合?
旧的_id属性无关紧要。我可以从源文件重命名/删除它们,我只是好奇是否有办法在导入过程中执行此操作。
coll1.json:
{"_id":1,"a":1}
{"_id":2,"a":2}
{"_id":3,"a":3}
和
coll2.json:
{"_id":1,"a":4}
{"_id":2,"a":5}
{"_id":3,"a":6}
如果我只是导入它们,mongoimport --db imp --collection imp --file coll2.json
我收到E11000重复键错误。
答案 0 :(得分:1)
如果要使用以下命令覆盖文档导入
mongoimport --db imp --collection imp --mode upsert --file coll2.json
在mongodb中 _id 字段默认是唯一的,所以你不能像你的情况一样拥有相同值的_id
coll1.json:
{"_id":1,"a":1} // _id is same as document below
{"_id":2,"a":2}
{"_id":3,"a":3}
coll2.json:
{"_id":1,"a":4} // {"_id":1,"a":1}
{"_id":2,"a":5}
{"_id":3,"a":6}
在这种情况下,您可以做的是将密钥名称从_id更改为id,这样您就可以拥有多个具有相同id值的文档。
coll1.json:
{"idField":1,"a":1}
{"idField":2,"a":2}
{"idField":3,"a":3}
coll2.json:
{"idField":1,"a":4}
{"idField":2,"a":5}
{"idField":3,"a":6}