Mongodb mongoimport E11000由于索引而重复密钥
我有一个包含以下字段的集合:Mongodb mongoimport E11000由于索引而重复密钥,mongodb,mongoimport,Mongodb,Mongoimport,我有一个包含以下字段的集合: name type color 我还有一个唯一的索引name\u 1\u type\u 1 假设数据集: [{ 名称:“名称1”, 类型:“类型1”, 颜色:“蓝色” }, { 名称:“名称2”, 类型:“类型1”, 颜色:“绿色” }] 使用mongoimportI创建初始数据集 现在,我需要更新集合以实现以下3个目标: 插入新文档(例如,在下面的代码片段中插入name1-type2) 更新现有文档中的颜色(例如下面name1中的蓝色->红色) 在某些文档中附
name
type
color
我还有一个唯一的索引name\u 1\u type\u 1
假设数据集:
[{
名称:“名称1”,
类型:“类型1”,
颜色:“蓝色”
}, {
名称:“名称2”,
类型:“类型1”,
颜色:“绿色”
}]
使用mongoimport
I创建初始数据集
现在,我需要更新集合以实现以下3个目标:
name1
-type2
)颜色
(例如下面name1
中的蓝色
->红色
)shape
[
{
名称:“名称1”,
类型:“类型1”,
颜色:“红色”,
形状:“圆”
},
{
名称:“名称1”,
类型:“类型2”,
颜色:“绿色”,
形状:“矩形”
}
]
mongoimport--upsert
时,我得到:
插入文档时出错:E11000重复密钥错误集合:
test.col1索引:名称\u 1\u类型\u 1 dup键
也许我用错了mongoimport
如何使用mongoimport实现上述3个upsert目标 你似乎错过了选择。如果没有它,
mongoimport
假设您的意思是\u id
,尤其是如果导入的文件中没有该id,那么它只是一直尝试“插入”新项目。因此出现了重复密钥错误
因此,如果指定基于唯一键的字段:
mongoimport-d数据库-c集合--upsert--upsertFields名称,输入input.json
然后您应该得到如下结果:
{
“_id”:ObjectId(“56f6332a49ec4ea8330063b6”),
“名称”:“名称1”,
“类型”:“类型1”,
“颜色”:“红色”,
“形状”:“圆”
}
{
“_id”:ObjectId(“56f6332a49ec4ea8330063b7”),
“名称”:“名称2”,
“类型”:“类型1”,
“颜色”:“绿色”
}
{
“_id”:ObjectId(“56f633d4824b97f80d3714b1”),
“名称”:“名称1”,
“类型”:“类型2”,
“颜色”:“绿色”,
“形状”:“矩形”
}
请注意,在现代版本中,当您使用--upsertFields
时,将暗示
N.B.如果您的数据采用这种结构,您可能还需要
--jsonArray
。您似乎错过了这个选项。如果没有它,mongoimport
假设您的意思是\u id
,尤其是如果导入的文件中没有该id,那么它只是一直尝试“插入”新项目。因此出现了重复密钥错误
因此,如果指定基于唯一键的字段:
mongoimport-d数据库-c集合--upsert--upsertFields名称,输入input.json
然后您应该得到如下结果:
{
“_id”:ObjectId(“56f6332a49ec4ea8330063b6”),
“名称”:“名称1”,
“类型”:“类型1”,
“颜色”:“红色”,
“形状”:“圆”
}
{
“_id”:ObjectId(“56f6332a49ec4ea8330063b7”),
“名称”:“名称2”,
“类型”:“类型1”,
“颜色”:“绿色”
}
{
“_id”:ObjectId(“56f633d4824b97f80d3714b1”),
“名称”:“名称1”,
“类型”:“类型2”,
“颜色”:“绿色”,
“形状”:“矩形”
}
请注意,在现代版本中,当您使用--upsertFields
时,将暗示
N.B.如果您的数据采用这种结构,您可能还需要--jsonArray