无法使用 MongoDB + Node 创建多个对象
Posted
技术标签:
【中文标题】无法使用 MongoDB + Node 创建多个对象【英文标题】:Can't create multiple objects with MongoDB + Node 【发布时间】: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中的数据仍然存在,我认为它会在执行服务器时更新。谢谢你!
【参考方案1】:
您可以尝试像这样更改您的控制器吗:
balanceController.create = async(req,res)=>
try
console.log('Req body:', req.body);
const balance = await Balance.create(req.body);
res.status(200).json(success: true);
catch(error)
console.log('ERROR: ', error);
res.status(400).json(success: false, error);
请注意,req.body
将被记录,因此您可以检查您的控制器是否接收到正确的数据(也许您正在从前端发送空的 req.body
)。 error
也将登录。如果这不起作用,请将 console.log(req.body)
和 console.log(error)
的输出添加到您的问题中。
【讨论】:
不,同样的事情。由于存在错误(11000),它将始终输入您的代码的捕获。问题是我第二次尝试将信息注册到数据库中。从字面上看,该集合有 1 个项目。如果我删除它,它将注册新的,但同样只允许数据库中的一项。 可以,但请尝试console.log(error)
。它会告诉你想要 key
重复。另外,请在您的问题中添加console.log(req.body)
。
console.log(error) 成功了!重复的键是 userId(在旧版本的数据库中,它是一个不再包含在此处的属性)。我不知道更改架构后db中的数据仍然存在,我认为它会在执行服务器时更新。非常感谢!
不,之前的所有数据都保留了下来。只是会根据更新的 Schema Model 创建新数据。以上是关于无法使用 MongoDB + Node 创建多个对象的主要内容,如果未能解决你的问题,请参考以下文章
Docker - Node.js + MongoDB - “错误:无法连接到 [localhost:27017]”
无法使用 Node.js Express MongoDB Mongoose CoffeeScript 发布
Node.JS、Express 和 MongoDB :: 多个集合