mongoimport E11000重复键由于指数
问题描述:
我有以下字段集合:mongoimport E11000重复键由于指数
name
type
color
我也有一个唯一索引name_1_type_1
。
假设的数据集:
[{
name: "name1",
type: "type1",
color: "blue"
}, {
name: "name2",
type: "type1",
color: "green"
}]
使用mongoimport
我创建初始数据集。
现在,我需要,以实现以下3个目标,以更新的集合:
- 插入新的文档(例如
name1
-type2
下面摘录) - 更新现有文档
color
(如blue
- >red
下面name1
) -
追加新的可选字段
shape
在一些文件[ { name: "name1", type: "type1", color: "red", shape: "circle" }, { name: "name1", type: "type2", color: "green", shape: "rectangle" } ]
然而,上述JSON文件执行mongoimport --upsert
的时候,我得到:
错误插入的文件:E11000重复键错误收集: test.col1指数:name_1_type_1 DUP键
也许我以错误的方式使用mongoimport
。
如何使用mongoimport实现上述3个upsert目标?
答
您似乎错过了--upsertFields
选项。没有它mongoimport
假设你的意思是_id
,特别是如果这不是在被导入的文件中存在,那么它只是试图“插入”新的项目。因此重复的关键错误。
所以,如果你指定已对其基于唯一键的字段:
mongoimport -d database -c collection --upsert --upsertFields name,type input.json
那么你应该得到像下面这样的结果:
{
"_id" : ObjectId("56f6332a49ec4ea8330063b6"),
"name" : "name1",
"type" : "type1",
"color" : "red",
"shape" : "circle"
}
{
"_id" : ObjectId("56f6332a49ec4ea8330063b7"),
"name" : "name2",
"type" : "type1",
"color" : "green"
}
{
"_id" : ObjectId("56f633d4824b97f80d3714b1"),
"name" : "name1",
"type" : "type2",
"color" : "green",
"shape" : "rectangle"
}
注意,在现代释放--upsert
暗示当您使用--upsertFields
。
N.B.如果您的数据是这样构建的,那么您可能还需要--jsonArray
。
'--upsertFields'是问题!谢谢。 –