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)
这是我使用 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)