Mongoose $pull 运算符不从数组中删除 ObjectID
Mongoose $pull operator not removing ObjectID from array
在我的应用程序中,我有一个 post 架构(如下所示):
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')
您可以在单个查询中执行这两项操作,无需 findOne
、
- 使用
mongoose.Types.ObjectId
将 req.user._id
转换为对象 ID
$inc
规定 likeNum
的计数
await Post.updateOne(
{ _id: req.params.postid },
{
$pull: { likes: mongoose.Types.ObjectId(req.user._id) },
$inc: { likeNum: -1 }
}
);
res.send('Unliked');
在我的应用程序中,我有一个 post 架构(如下所示):
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')
您可以在单个查询中执行这两项操作,无需 findOne
、
- 使用
mongoose.Types.ObjectId
将 $inc
规定likeNum
的计数
req.user._id
转换为对象 ID
await Post.updateOne(
{ _id: req.params.postid },
{
$pull: { likes: mongoose.Types.ObjectId(req.user._id) },
$inc: { likeNum: -1 }
}
);
res.send('Unliked');