正确使用Javascript中的MongoDB更新功能



我在使用MongoDB API更新文档时遇到了一个可能很简单的问题。我尝试了好几件事,但都没有成功。在对比中插入和删除都很好。

那么我在做什么呢。我正在尝试用以下方法更新现有文档:

router.post('/updatecontact', function(req, res) {
    console.log(req.body.id);
    console.log(req.body.data);
    var db = req.db;
    var collection = db.get('contacts');
    collection.update( { '_id': req.body.id }, req.body.data, true );
});

控制台输出给我:

5666adefcd80a0f3bdbdebe1
{"_id":"5666adefcd80a0f3bdbdebe1","surname":"Test","firstname":"-","group":"-","organization":[{"type":"Verwaltung","name":"Test-Orga","orgunit":""}],"position":"-"}

所以这两个参数似乎都可以,但服务器只返回:

POST /contacts/updatecontact 500 43.911 ms - 1548

replaceOne函数也是如此

router.post('/updatecontact', function(req, res) {
    console.log(req.body.id);
    console.log(req.body.data);
    var db = req.db;
    var collection = db.get('contacts');
    collection.replaceOne(
        {'_id': req.body.id},
        JSON.parse(req.body.data), 
        {upsert: true},
        function(err, result){
        res.send(
            (err === null) ? { msg: '' } : { msg: err }
        );
    });
});

无论我是否执行JSON.parse()或使用其他筛选器。

例如{'surname': JSON.parse(req.body.data).surname},结果不变。

与之形成对比的是下面的插入函数,其中的相关部分似乎是相同的。

router.post('/insert', function(req, res) {
    console.log(req.body);
    var db = req.db;
    var collection = db.get('contacts');
    collection.insert(JSON.parse(req.body.data), function(err, result){
        console.log(result);
        console.log('ID is ' + result._id);
        res.send(
            (err === null) ? { oid: result._id } : { oid: '' }
        );
    });
});

有人能解释一下出了什么问题吗?

我以前使用save方法(req.collection.save)进行更新。我有一个middelware,它将findById返回的集合添加到req

var middelware = function(req, res, next){
    yourCollection.findById(req.params.id, function(err, data){
        if(err)
            res.status(500).send(err);
        else if(data){
            req.data= data;
            next();
        }else{
            res.status(404).send('no data found');
        }
    });
}
//this will update parts of your existing resource
var put = function(req, res){
    req.data.a= req.body.a;
    req.data.b= req.body.b;
    ...
    req.data.save(function(err) {
        if(err)
            res.status(500).send(error);
        else
            res.json(req.data);
    }); 
}
var router = express.Router();
router.use('/:id',middelware);
router.route('/')
.put(put);

相关内容

  • 没有找到相关文章

最新更新