如何$pull 对象数组下的数组

问题描述 投票:0回答:1

我有一个像这样的数据库:

"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 } }
    );
mongodb mongoose
1个回答
0
投票

您实际需要什么有点混乱,所以这里有两个选择:

选项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
。这可能是一个拼写错误并给您带来了问题。

© www.soinside.com 2019 - 2024. All rights reserved.