Mongo分配相同的ObjectId? MongoError:E11000重复键错误集合

时间:2018-06-01 15:36:01

标签: mongodb mongoose mongoose-schema

我试图在一个集合中插入新文档,但在第一个文档之后(当我试图插入第二个文档时)mongo向我显示以下错误:

 MongoError: E11000 duplicate key error collection: bbdd.productions index: _id_ dup key: { : ObjectId('5b118dabefd04e51a28ffc4d') }

实际上它是有道理的,因为" _id" :ObjectId(" 5b118dabefd04e51a28ffc4d")是分配给插入的第一个文档的ID。

我读到可能存在导致问题的索引,但该集合只有 id 索引。

db.productions.getIndexes()显示:

[
    {
        "v" : 1,
        "key" : {
            "_id" : 1
        },
        "name" : "_id_",
        "ns" : "production_rapipizza.productions"
    }
]

我尝试使用.dropIndexes()删除并重新启动应用但它没有工作(我在创建该集合的新文档时遇到了同样的错误)。

我认为mongo将相同的ObjectId分配给第一个文档和以下文件但是......它不可能,是吗?

模型:

    model.Production = mongoose.model("productions", new Schema({
    products: {type: Array, required: true},
    date: {type: Date, required: true},
    user: {type: ObjectId, ref: 'users', required: true},
    createdAt: {type: Date, default: Date.now}
}, {collection: 'productions', timestamps: true}));

我在节点中的查询:

    app.post('/api/production', (req, res, next) => {
    req.body.date = new Date(req.body.date);
    const production = new model.Production(req.body);
    return production.save().then(
        () => res.status(200).send("La producción para el día indicado fue registrado exitosamente"))
        .catch(next)
});

如果我通过mongodb shell执行等效操作,它可以正常工作,所以我认为上面的代码我做错了。这就是我所说的"等同于":

db.productions.insert({products: [ { "product" : "oneproduct", quantity : 100 } ], date : ISODate("2018-06-03T03:00:00Z"), user : ObjectId("5b0b50326b351b4527b067c6")});

我插入了第一份文件:

{ "_id" : ObjectId("5b118dabefd04e51a28ffc4d"), "products" : [ { "product" : "nameoftheproduct", "quantity" : "100" } ], "date" : ISODate("2018-06-01T03:00:00Z"), "user" : ObjectId("5b0b50326b351b4527b067c6"), "createdAt" : ISODate("2018-06-01T18:17:15.404Z"), "updatedAt" : ISODate("2018-06-01T18:17:15.404Z"), "__v" : 0 }

我们将非常感激地提供任何帮助或想法。

1 个答案:

答案 0 :(得分:0)

我使用相同的组件进行保存和编辑。因此,如果在开始时我选择记录的任何产品,然后尝试创建一个新产品,它保留第一个的_id。我需要清除处于反应状态的_id。