猫鼬upsert:True选项越野车不会创建新对象

时间:2018-06-28 09:49:04

标签: node.js mongodb express

我想通过放置路由功能创建一个对象,如果所传递的文档_id字段不存在,则希望将其重新创建,否则,希望对其进行更新。 (我以这种方式保存了一条路线)。

exports.updateFlex = function(req, res) {
    //findOneAndUpdate
    Flex.findOneAndUpdate({_id: req.params.Flex_id}, req.body, {new: true, upsert:true}, function(err, flex) {
        if (err)
            console.error(flex);
        res.json(flex);
        console.log(flex)

    });
};

我观察到一个奇怪的行为,如果document_id字段存在,并且与router-link id参数(Flex / Flex /:id)匹配,则文档得到更新。如果我将路由器链接更改为新的ID,但是文档的_id字段不存在,则仅当路由器链接ID与document_id字段匹配时才创建它!否则,将不会创建任何文档...

显然,findOneAndUpdate({_ id:req.params.Flex.id})不在数据库(Flex)中检查路由的_id是否已存在于文档中,而是将路由_id与新创建的_id进行比较。传递了文档对象的_id字段(我在python中创建),只有在匹配时,才创建该文档并将其保存在数据库中。这真的很奇怪,我不知道这怎么会发生?

似乎在用猫鼬update()方法是一样的。

0 个答案:

没有答案