gpt4 book ai didi

node.js - MongoDB,使用Mongoose重复键错误索引?

转载 作者:可可西里 更新时间:2023-11-01 09:52:17 25 4
gpt4 key购买 nike

我有一个 MEN(MongoDB、Express、Node)应用程序,当我插入第一个项目时一切都很好,但是当我想添加第二个项目时我得到这个错误:

E11000 duplicate key error index: local.movies.$title_1 dup key: { : null }

如果我然后删除第一行,然后再次插入一个项目,它就可以工作,但是当我想添加第二个项目时,我再次出现错误。

我真的在这个问题上拉扯我的头发,似乎找不到问题:(

希望有人能帮助我:)

顺便说一句,我如何从命令行访问我的表?我尝试了 db.movi​​es.find()movies.find() 和其他选项,但没有任何反应,当我键入 show collestions 时我只得到 system.indexes。我如何从命令行删除表格并尝试创建一个新表格?

这是我的模型:

var mongoose = require('mongoose');
var MovieSchema = require('../schemas/movie');
var Movies = mongoose.model('Movie', MovieSchema);
module.exports = Movies;

这是我的模式:

var mongoose = require('mongoose');
var MovieSchema = new mongoose.Schema(
{
movieTitle: { type: String, required: true, index: { unique: true } },
movieYear: { type: String, required: true },
movieDirector: { type: String, required: true },
movieImdbLink: { type: String, required: true }
}
);
module.exports = MovieSchema;

我也试过没有索引,movieTitle: { type: String, required: true }

这是我的插入/更新函数:

// insert/update movie
exports.save = function(req, res){
var _id = (req.body._id !== 'undefined') ? req.body._id : null;
var movieTitle = req.body.movieTitle;
var movieYear = req.body.movieYear;
var movieDirector = req.body.movieDirector;
var movieImdbLink = req.body.movieImdbLink;
var movie = null;
if(_id){
var query = {_id: _id};
Movies.update(
query,
{
$set:{
movieTitle: movieTitle,
movieYear: movieYear,
movieDirector: movieDirector,
movieImdbLink: movieImdbLink
}
},
{safe:true},
function(err, result, raw){
if(err){
console.log(err);
res.send(500);
}
else{
res.send(200);
}
}
);
}
else{
movie = new Movie(
{
movieTitle: movieTitle,
movieYear: movieYear,
movieDirector: movieDirector,
movieImdbLink: movieImdbLink
}
);
movie.save(function(err){
if(err){
res.redirect('/movies/?msg=' + err.message);
}
else{
res.redirect('/movies');
}
});
}
};

最佳答案

movieTitle 有一个唯一的索引:true。该索引是在应用程序首次启动时创建的。其余时间,mongoose 检查索引是否存在。如果没有,它将创建它。

当您删除唯一声明时,mongoose 不会像您期望的那样重新创建索引。也许在功能版本中它会。

您必须手动删除索引 ( see mongo docs ) 或整个数据库。

重新启动您的应用后,将创建新索引。

希望对你有帮助

关于node.js - MongoDB,使用Mongoose重复键错误索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22356759/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com