Javascript Mongoose$pull运算符未从数组中删除ObjectID
在我的应用程序中,我有一个post模式(如下所示): 我想在发送用户请求时从likes数组中删除Javascript Mongoose$pull运算符未从数组中删除ObjectID,javascript,node.js,mongoose,mongoose-schema,Javascript,Node.js,Mongoose,Mongoose Schema,在我的应用程序中,我有一个post模式(如下所示): 我想在发送用户请求时从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') 但是,调用路由时,o
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')
您可以在一个查询中执行这两个操作,无需
findOne
- 使用
mongoose.Types.ObjectId
对$inc
likum
尝试使用
mongoose.Types.ObjectId(请求用户id)
@turivishal Hello将\u id转换为对象id。这仍然没有从数组中删除对象id。请参阅上面的更新代码。您正在对find对象执行更新操作,只需执行单独的查询wait Post.update({},{$pull:{likes:mongoose.Types.ObjectId(req.user.\u id)}})
@turivishal Hi这仍然不起作用。请在查询之前检查上面的更新代码wait
,无需post.save()
命令,因为updateOne
将保存事务,如果它仍然不起作用,请尝试转换查询{u id:mongoose.Types.ObjectId(req.params.posted)}
Post.updateOne({_id: req.params.postid}, { $pull: { likes: mongoose.Types.ObjectId(req.user._id) } })
post.likeNum--
await post.save()
res.send('Unliked')
await Post.updateOne(
{ _id: req.params.postid },
{
$pull: { likes: mongoose.Types.ObjectId(req.user._id) },
$inc: { likeNum: -1 }
}
);
res.send('Unliked');