猫鼬 Mongo错误:11000

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)

Pas*_*ers 6

这是怎么回事

\n

我看了你的完整代码。唯一真正的问题(也符合您所看到的错误消息)如下:

\n
    \n
  • 在你的./models/routineParts.js你已经设置了一个unique字段。就你而言userid。例如,如果您使用“ ”创建新routineParts文档,则无法使用相同的“ ”创建另一个文档。简而言之,这意味着每个用户只能创建 1 个文档。\n第一次对路由发出请求时,它创建了第一个文档。之后,每个请求都会失败,因为它已经创建了 1 个文档。(在此处阅读有关猫鼬的唯一索引的信息)\n查看您的. 如果您尝试用不同的请求执行相同的请求,它应该可以工作。useridAAAuseridAAAroutineParts

    POSTlocalhost:5000/RoutinePartsroutinePartsroutineParts

    ./controller/routineParts.jsuserid
  • \n
\n

怎么修

\n
    \n
  • 1unique: true :从您的架构中删除./models/routineParts

    \n
  • \n
  • 2 : \xe2\x9a\xa1 删除索引。Mongoose 最有可能已经注册了这个索引,你必须专门删除它。否则它将始终将该userid字段视为unique

    \n
  • \n
  • 3:您仍处于开发阶段,因此放弃该集合应该不会有什么坏处RoutineParts

    \n
  • \n
  • 4POST localhost:5000/RoutineParts :重新启动应用程序并尝试多次访问端点。您现在应该能够routineParts在同一用户下创建多个文档。

    \n
  • \n
\n

如何删除索引

\n

那是一个不同的故事。这个问题应该对你有帮助。他们也在使用猫鼬。如果您使用的是最新版本,mongoose则有一种称为 的方法cleanIndexesunique:true从模型中删除后使用此方法。

\n