【发布时间】:2021-11-09 15:44:06
【问题描述】:
我正在尝试使用 mongodb、mongoose 和 express(通过使用 Insomnia)创建多个对象。我设法创建了第一个对象,但是当我尝试创建以下对象时,它给了我以下错误:
{
"success": false,
"message": {
"driver": true,
"name": "MongoError",
"index": 0,
"code": 11000
}
}
我试图通过在对象中包含不同的数据来解决它(尽管我没有在属性中指定唯一性),但它无论如何都会抛出 11000(重复键)错误。
req.body 的日志返回 { inmovilizadoInmaterial: 12, inmovilizadoMaterial: 13 }(因为注册时包含的数据就是这些值)
这是模型
const mongoose = require("mongoose");
const { Schema } = mongoose;
const balanceSchema = new Schema(
{
inmovilizadoInmaterial: { type: Number, default: 0 },
inmovilizadoMaterial: { type: Number, default: 0 },
}
);
module.exports = mongoose.model("Balance", balanceSchema);
这是连接模型和控制器对象的路由器:
const express = require('express');
const router = express.Router();
const balanceController = require('../controllers/balance.controller');
router.post('/create', balanceController.create);
module.exports = router;
最后是具有创建对象功能的控制器。
const balanceController = {};
const Balance = require('../models/Balance')
balanceController.create = async(req,res)=>{
const balance = new Balance(req.body);
balance.save();
}
module.exports = balanceController;
我知道这一定是一个非常简单的错误,但我对这项技术非常陌生。
非常感谢您!
【问题讨论】:
-
如果您没有在任何索引上专门设置任何唯一性约束,那么唯一的默认约束是在
_id字段上。我假设您将其发送到req.body。 -
是的,它包含在 req.body 中。问题在于,重复键是 userId(在旧版本的数据库中,它是此处不再包含的属性)。我不知道更改架构后db中的数据仍然存在,我认为它会在执行服务器时更新。谢谢你!
标签: mongodb express mongoose mean-stack insomnia