【问题标题】:Error: TypeError: user.insertOne is not a function using mongoose错误:TypeError:user.insertOne 不是使用猫鼬的函数
【发布时间】: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));
});

谢谢你!

【问题讨论】:

    标签: mongodb mongoose mongodb-query mongoose-schema mern


    【解决方案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。
    猜你喜欢
    • 1970-01-01
    • 2018-01-15
    • 2019-01-18
    • 2021-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-07
    相关资源
    最近更新 更多