【发布时间】:2021-02-08 01:34:39
【问题描述】:
在我的应用程序中,我有一个发布模式(如下所示):
const postSchema = new mongoose.Schema({
file: {
type: String,
required: true
},
caption: {
type: String,
maxLength: 2000
},
user: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User'
},
likeNum: {
type: Number,
default: 0,
min: 0
},
likes: [{
type: mongoose.Schema.Types.ObjectId
}]
})
我想在发送用户请求时从 likes 数组中删除 objectid。
路线:
const post = await Post.findOne({_id: req.params.postid})
const user = req.user._id
post.update({}, {$pull: {likes: user}})
post.likeNum--
await post.save()
res.send('Unliked')
但是,当调用路由时,objectid 不会从数组中删除。谁能发现为什么?谢谢。
更新:
const user = mongoose.Types.ObjectId(req.user._id)
更新 2:
Post.updateOne({_id: req.params.postid}, { $pull: { likes: mongoose.Types.ObjectId(req.user._id) } })
post.likeNum--
await post.save()
res.send('Unliked')
【问题讨论】:
-
尝试使用
mongoose.Types.ObjectId(req.user._id)将_id转换为对象id -
@turivishal 你好。这仍然没有从 likes 数组中删除对象 id。请参阅上面的更新代码。
-
你正在对查找对象进行更新操作,只需单独查询
await Post.update({}, { $pull: { likes: mongoose.Types.ObjectId(req.user._id) } }) -
@turivishal 嗨,这仍然没有奏效。请检查上面的更新代码
-
在查询前输入
await,不需要post.save()命令,因为updateOne将保存事务,如果仍然无效,请尝试转换您的查询{_id: mongoose.Types.ObjectId(req.params.postid)}
标签: javascript node.js mongoose mongoose-schema