Loo*_*lii 3 mongoose mongodb node.js
我通过邮差发送了一个创建帖子信号。有一次,邮政信号成功。但下次又失败了。错误信息是这样的。
Error creating new record : {
"driver": true,
"name": "MongoError",
"index": 0,
"code": 11000,
"keyPattern": {
"RoutineParts.userId": 1
},
"keyValue": {
"RoutineParts.userId": null
}
}
Run Code Online (Sandbox Code Playgroud)
我无法理解错误消息,我的邮政编码和用户模型代码是这样的,
// it's post code.
router.post('/',(req,res)=>{
const newRecord = User ({
username : req.body.username,
email : req.body.email,
password : req.body.password
})
newRecord.save((err,docs)=>{
if(!err) {
res.send(docs)
}else {
console.log('Error creating new record : ' + JSON.stringify(err,undefined,2))
}
})
})
// it's user model
const mongoose = require('mongoose')
const userSchema = new mongoose.Schema(
{
username : {type:String},
email: { type: String, required: true},
password: { type: String, required: true, trim: true },
created_at : { type: Date, default: Date.now },
updated_at : { type: Date, default: Date.now },
}
)
const User = mongoose.model('User', userSchema);
module.exports = { User }
Run Code Online (Sandbox Code Playgroud)
我不明白。事实上“RoutineParts”是模型之一,但我没有编写用户文档。并且,控制器路径在 app.js 中得到纠正
我该如何解决它?
这是 RoutineParts 模型
const mongoose = require('mongoose')
const userSchema = new mongoose.Schema(
{
routine_name : {type:String},
userId : { type: String, required: true},
exercise_name : { type: String},
order : { type: Number},
}
)
const RoutineParts = mongoose.model('RoutineParts', userSchema);
module.exports = { RoutineParts }
Run Code Online (Sandbox Code Playgroud)
这是 app.js 内容
// Connecting data to the MongoDB through Mongoose
require('./db')
const express = require('express')
const app = express()
const PORT = 5000
const bodyParser = require('body-parser')
const userRoute = require('./controller/user')
const routineRoute = require('./controller/routine')
const RP_Route = require('./controller/routineParts')
const EX_Route = require('./controller/excersise')
app.use(bodyParser.json())
app.get("/", function (req, res) {
res.status(201).send("<h1>Hey guys! Hello World !!</h1>");
});
app.listen(PORT, function () {
console.log(`start express server on port ${PORT}`);
});
app.use('/Users', userRoute)
app.use('/Routine', routineRoute)
app.use('/Excersise', EX_Route)
app.use('/RoutineParts', RP_Route)
Run Code Online (Sandbox Code Playgroud)
我看了你的完整代码。唯一真正的问题(也符合您所看到的错误消息)如下:
\n./models/routineParts.js你已经设置了一个unique字段。就你而言userid。例如,如果您使用“ ”创建新routineParts文档,则无法使用相同的“ ”创建另一个文档。简而言之,这意味着每个用户只能创建 1 个文档。\n第一次对路由发出请求时,它创建了第一个文档。之后,每个请求都会失败,因为它已经创建了 1 个文档。(在此处阅读有关猫鼬的唯一索引的信息)\n查看您的. 如果您尝试用不同的请求执行相同的请求,它应该可以工作。useridAAAuseridAAAroutinePartsPOSTlocalhost:5000/RoutinePartsroutinePartsroutineParts./controller/routineParts.jsuserid1unique: true :从您的架构中删除./models/routineParts。
2 : \xe2\x9a\xa1 删除索引。Mongoose 最有可能已经注册了这个索引,你必须专门删除它。否则它将始终将该userid字段视为unique。
3:您仍处于开发阶段,因此放弃该集合应该不会有什么坏处RoutineParts。
4POST localhost:5000/RoutineParts :重新启动应用程序并尝试多次访问端点。您现在应该能够routineParts在同一用户下创建多个文档。
那是一个不同的故事。这个问题应该对你有帮助。他们也在使用猫鼬。如果您使用的是最新版本,mongoose则有一种称为 的方法cleanIndexes。unique:true从模型中删除后使用此方法。