我试图在一个集合中插入新文档,但在第一个文档之后(当我试图插入第二个文档时)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 }
我们将非常感激地提供任何帮助或想法。
答案 0 :(得分:0)
我使用相同的组件进行保存和编辑。因此,如果在开始时我选择记录的任何产品,然后尝试创建一个新产品,它保留第一个的_id。我需要清除处于反应状态的_id。