下面是我尝试更新mongoDB中的值的代码,但它在我尝试更新值时无法正常工作并显示错误。 即将发生的错误是:
{
"name": "MongoError",
"message": "insertDocument :: caused by :: 11000 E11000 duplicate key error index: agastyaforonewaydevelopmentstaging.deviceinfos.$_id_ dup key: { : \"355537056685953\" }",
"index": 0,
"code": 11000,
"errmsg": "insertDocument :: caused by :: 11000 E11000 duplicate key error index: agastyaforonewaydevelopmentstaging.deviceinfos.$_id_ dup key: { : \"355537056685953\" }"
}
代码是:
// mongoose.connect('mongodb://user:password@ds031671.mongolab.com:31671/oneway', function(err) {
if (err) {
console.log('connection error', err);
} else {
console.log('connection successful');
}
});
var deviceSchema = new mongoose.Schema({
_id: {
type: String,
unique: true
},
MobileNum: Number,
Fecode: String
})
var deviceinfo = mongoose.model('deviceinfo', deviceSchema);
// Device collection close
app.get('/feature', function(req, res) {
res.render('feature.ejs', {
user: req.user
});
});
app.get('/feature', function(req, res) {
res.render('feature.ejs');
});
app.post('/feature', function(req, res) {
// if(collection.findOne({_id:req.body.Imei}))
new deviceinfo({
_id: req.body.Imei,
MobileNum: req.body.Mobile,
Fecode: req.body.fecode
}).save(function(err, drd) {
if (err) res.json(err);
else
res.render('feature.ejs');
});
});
app.get('/fupdate', function(req, res) {
res.render('upfeature.ejs');
});
app.post('/fupdate', function(req, res) {
// if(collection.findOne({_id:req.body.Imei}))
new deviceinfo({
_id: req.body.Imei,
MobileNum: req.body.Mobile,
Fecode: req.body.fecode
}).update(function(err, drd) {
if (err) res.json(err);
else
res.render('feature.ejs');
});
});
如何纠正错误? 任何帮助将不胜感激。
答案 0 :(得分:0)
检查错误,明确说明
duplicate key error index:
这意味着您正在尝试复制索引(例如,将其复制两次),而您却无法复制索引。
我再次检查了你的代码,我发现你已经
了app.get('/feature'
两次。有什么理由吗?
PS:MongoDB说你有两次相同的ID,这可能意味着你的前端出现了问题(后端看起来很好),并且你发送的是相同的值。
编辑:如果要更新记录,则必须使用Mongoose的更新方法。以下是文档对此的评论http://mongoosejs.com/docs/2.7.x/docs/updating-documents.html 否则,您只是尝试使用相同的数据创建新记录。
答案 1 :(得分:0)
请避免使用现有_id
的新对象模型更新文档相反,您可以通过将_id作为查询字符串
进行更新来更新文档app.post('/fupdate/:Imei', function(req, res) {
deviceinfo.findById(req.params.Imei, function(err, device) {
if (err)
res.send(err);
device.MobileNum = req.body.Mobile;
device.Fecode = req.body.fecode;
device.save(function(err) {
if (err)
res.send(err);
res.json({ message: 'device updated!' });
});
});
});
答案 2 :(得分:0)
@Raja 如何更改编辑按钮,以便在单击时应选择ID。
我给出的编辑选项作为链接打开了一个页面上的click.Below是代码:
<table class="table table-bordered">
<tbody>
<tr>
<td><%= drd._id %></td>
<td><%= drd.MobileNum %></td>
<td><%= drd.Fecode %></td>
<td> <a class="button" href="/fupdate"><img src="/images/edit.png" width="20" height="20"></a></td>
</tr>
</tbody>
</table>