我有一个像这样的数据库:
"userId": "sdsdad-dsdsds",
"userName": "user1",
"videos": [
{
"name": "video_541d",
"likes": ["user1,", "user1"],
},{
"name": "video_3212",
"likes": ["user1,", "user1", "user3"],
},
],
我想从喜欢数组中删除特定用户。
const result = await User.updateOne(
{ userName, 'videos.name': videoName, 'videos.likes': userId },
{ $pull: { 'videos.$.likes': userId } }
);
您实际需要什么有点混乱,所以这里有两个选择:
选项1
这将匹配
user
并从 videos.likes
数组中提取值 only 与您的查询匹配的 videos
数组元素:
const result = await User.findOneAndUpdate(
{ userName: userName , 'videos.name': videoName, 'videos.likes': userId },
{
$pull: {
"videos.$.likes": userId
}
},
{new: true}
);
请参阅此处了解完整的工作示例。
选项2
这将匹配
user
并从匹配文档中的 all
videos.likes
数组的 videos.likes
数组中提取值:
const result = await User.findOneAndUpdate(
{ userName: userName , 'videos.name': videoName, 'videos.likes': userId },
{
$pull: {
"videos.$[].likes": userId
}
},
{new: true}
);
请参阅此处了解完整的工作示例。
注意:在示例文档中,出现了几次
user1,
,其中 ,
之后有一个逗号 user1
。这可能是一个拼写错误并给您带来了问题。