我想通过放置路由功能创建一个对象,如果所传递的文档_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()方法是一样的。