【问题标题】:Mongoose: save() is not a function when using find() and atributing value to variableMongoose:使用 find() 并将值归因于变量时,save() 不是函数
【发布时间】:2021-03-20 23:53:59
【问题描述】:

这是我正在使用 mongoose 处理的 Schema 的基本结构:

  const User = {
    uid: {
      type: String
    },
    routes: {
      type: Array
    }
   }

在我的应用程序中有一个到 /route 的 POST,其中 uid 和一个新的 route 作为“正文参数”提供。为了添加到 routes 数组中,我写了一个类似这样的代码(唯一的区别是我检查路由是否已经存在):

  var user = await User.find({uid: uid}) // user is found, as expected
  user[0].routes.push(route //parameter)  
  user.save()   

但是,当发出 POST 请求时,它会引发错误:

TypeError: user.save 不是函数

我做错了什么?

【问题讨论】:

    标签: javascript node.js mongodb mongoose save


    【解决方案1】:

    您的代码中的user 是一个文档数组

    所以您将在该数组中拥有 mongo 文档

    你不能做array.save,你必须做document.save

    await user[0].save()

    var user = await User.find({uid: uid}) // user is found, as expected
    if (user && user.length) {
        user[0].routes.push(route //parameter)  
        await user[0].save(); // save the 1st element of the object
    }
    

    如果您的查询只返回 1 条记录,最好使用 https://mongoosejs.com/docs/api.html#model_Model.findOne

    var user = await User.findOne({uid: uid}) // user is found, as expected
    if (user) {
        user.routes.push(route //parameter)  
        await user.save(); // save the 1st element of the object
    }
    

    【讨论】:

      【解决方案2】:

      如果您只需要找到一个特定的用户,您应该使用findOne 函数

      User.findOne({uid: uid})
      .then(
          (user) => {
              user[0].routes.push(route //parameter);
              user.save();
          },
          (err) => {
              console.error(err);
          }
      )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-11-15
        • 2015-06-30
        • 1970-01-01
        • 2021-08-28
        • 2016-11-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多