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”,
    颜色:“绿色”,
    形状:“矩形”
    }
    ]
    
  • 但是,当对上述json文件执行
    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