Mongoose:使用 find() 并将值赋予变量时,save() 不是函数

Mongoose: save() is not a function when using find() and atributing value to variable

这是我使用 mongoose 处理的模式的基本结构:

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

在我的应用程序中有一个 POST 到 /route,其中 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 is not a function

我做错了什么?

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
}

如果你的查询returns只有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
}

如果您只需要查找一位特定用户,则应改用 findOne 函数

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

我认为 bulkSave() 可能是您要查找的内容:

  var user = await User.find({uid: uid}
  enter code user[0].routes.push(route //parameter)  
  await User.bulkSave(user)