在我的应用程序中,我有一个帖子模式(如下所示):
然而,当调用路由时,
更新:
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
}]
})
当用户发送请求时,我想从喜欢的数组中删除一个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。 - turivishalawait Post.update({}, { $pull: { likes: mongoose.Types.ObjectId(req.user._id) } })
。 - turivishalawait
,不需要使用post.save()
命令,因为updateOne
将保存事务,如果仍然无法正常工作,则尝试转换查询{_id: mongoose.Types.ObjectId(req.params.postid)}
。 - turivishal