我正在尝试建立一个类似/不同的系统。和不一样,我需要从喜欢阵列中删除用户。但是mongodb $pull
不起作用。
$inc
命令工作正常,但$pull
无效。
这是我的模式
postedBy: {
type: mongoose.Schema.Types.ObjectId,
required: true,
ref: "User"
},
likes: [
{
type: mongoose.Schema.Types.ObjectId,
ref: "User"
}
],
likeCount: {
type: Number,
default: 0
},
commentBody: {
type: String
},
contentId: {
type: mongoose.Schema.Types.ObjectId,
refPath: "contentType",
required: true
},
contentType: {
type: String,
required: true,
enum: ["Video", "Comment"]
},
isApproved: {
type: Boolean,
default: true
},
comments: [
{
type: mongoose.Schema.Types.ObjectId,
ref: "Comment"
}
],
postedOn: {
type: Date,
default: Date.now()
}
mongodb查询
await Video.updateOne(
{ _id: contentId, likeCount: { $gt: 0 } },
{
$pull: {
likes: decoded.id
},
$inc: { likeCount: -1 }
}
);
答案 0 :(得分:0)
您应该将查询更新为如下形式:
await Video.updateOne(
{ _id: contentId, likeCount: { $gt: 0 } },
{
$pull: {
"likes": { "_id": ObjectId(decoded.id)}
},
$inc: { likeCount: -1 }
}
);
我假设在devede.id
中有字符串,并且string与ObjectId
不同。因此,我们需要将其转换为ObjectId
。