从节点js

时间:2015-06-24 12:05:11

标签: node.js mongodb mongoose ejs

下面是我尝试更新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');
    });
});

如何纠正错误? 任何帮助将不胜感激。

3 个答案:

答案 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>