错误:TypeError:user.insertOne 不是使用猫鼬的函数

Posted

技术标签:

【中文标题】错误:TypeError:user.insertOne 不是使用猫鼬的函数【英文标题】:Error: TypeError: user.insertOne is not a function using mongoose 【发布时间】:2020-07-02 21:10:22 【问题描述】:

我在创建发送到 MongoDB 的路由时遇到了困难。 当我返回用户时,它会返回完整的数据库。这适用于使用用户或“用户”。 用户是模型 let User = require('../models/user.model');

 User.findById(req.params.id)
    .then(user => 
        if (!user)
            res.status(404).send("data is not found");
        else
            for(var key in req.body.proposal) 
                //res.send(user.proposal)
                //res.send(user)
                //res.send(User.username)
                user.proposal.insertOne(
                     
                        "uid" : req.body.proposal[key].uid,
                        "clientEmail" : req.body.proposal[key].clientEmail,
                        "summary" :req.body.proposal[key].summary,
                        "terms" :req.body.proposal[key].terms,
                        "form" :req.body.proposal[key].form 
                     //update
                )
            
     user.save()
        .then(user => res.json(user))
        .catch(err => res.status(400).json('Error: ' + err));   
    )
    .catch(err => res.status(400).json('Error: ' + err));
);

谢谢你!

【问题讨论】:

【参考方案1】:

应该是这样的:

let proposalArr = [];
for (const key in req.body.proposal) 
  proposalArr.push(
    uid: req.body.proposal[key].uid,
    clientEmail: req.body.proposal[key].clientEmail,
    summary: req.body.proposal[key].summary,
    terms: req.body.proposal[key].terms,
    form: req.body.proposal[key].form
  );

user.proposal = proposalArr;
user.save().............

你不能在数据库查询的结果上使用.insertOne,它是猫鼬模型的一个功能,可以向集合插入新文档,但不能向对象插入新字段。您需要像使用 .js 代码向 json 对象添加新字段一样,但 mongoose 会跟踪对象的更改,并且当您使用 .save() 时,它可以使用所有这些更改更新集合中的文档。

您可以一次调用而不是两次 DB 调用,检查:.findByIdAndUpdate() 并尝试以下示例代码:

let proposalArr = [];
for (const key in req.body.proposal) 
  proposalArr.push(
    uid: req.body.proposal[key].uid,
    clientEmail: req.body.proposal[key].clientEmail,
    summary: req.body.proposal[key].summary,
    terms: req.body.proposal[key].terms,
    form: req.body.proposal[key].form
  );


User.findByIdAndUpdate(
  req.params.id,
  
    proposal: proposalArr
  ,
   new: true 
)
  .then(user => 
    if (!user) res.status(404).send("data is not found");
    res.json(user);
  )
  .catch(err => res.status(400).json("Error: " + err));

【讨论】:

谢谢。工作得很好。是因为在查询结果上使用了 insertOne。

以上是关于错误:TypeError:user.insertOne 不是使用猫鼬的函数的主要内容,如果未能解决你的问题,请参考以下文章

错误:TypeError:无法读取未定义的属性“图像”

TypeError:错误 #1009:无法访问空对象的属性或方法

Anvil 错误:TypeError:“NoneType”对象不可下标

我怎样才能摆脱错误-TypeError:无法读取未定义的属性'8'

TypeError:错误#2007:参数文本必须为非空

Actionscript 字典:TypeError:错误 #1006:getValue 不是函数