Mongoose:使用 find() 并将值归因于变量时,save() 不是函数
Posted
技术标签:
【中文标题】Mongoose:使用 find() 并将值归因于变量时,save() 不是函数【英文标题】:Mongoose: save() is not a function when using find() and atributing value to variable 【发布时间】: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 不是函数
我做错了什么?
【问题讨论】:
【参考方案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);
)
【讨论】:
以上是关于Mongoose:使用 find() 并将值归因于变量时,save() 不是函数的主要内容,如果未能解决你的问题,请参考以下文章
Mongoose - 使用 find() 查询文档,其中嵌套数组值的总和在一定范围内
Mongoose .find 带有 req.params 数组?和 res.json 每个值和计数的数组?