【发布时间】:2022-01-26 19:56:35
【问题描述】:
我正在制作一个适用于播放列表的应用程序。我将 MongoDB 与 mongoose 一起使用,并通过数组将视频存储在每个播放列表中,如下所示:
{
_id: ObjectId("61ca1d0ddb66b3c5ff93df9c")
name: "Playlist A"
videos: [
{
title: "Video 1",
url: "www.YouTube.com/video1",
startTime: "20",
endTime: "40",
_id: ObjectId("61ca1d1ddb66b3c5ff93e0ba")
},
...
]
}
我希望能够根据视频的_id 从播放列表中删除视频。我曾尝试在网上寻找解决方案,但我找到的解决方案不起作用。这就是我正在尝试的:
Playlist.updateOne(
{ _id: req.params.playlistId },
{ $pull: { videos: { _id: req.params.vidId } } }
)
当我运行上面的代码并记录结果时,我得到以下信息(不确定这是否相关):
{
acknowledged: true,
modifiedCount: 1,
upsertedId: null,
upsertedCount: 0,
matchedCount: 1
}
如果您需要更多信息,请告诉我这是我第一次发布问题:)
【问题讨论】:
-
一个不错的提示:分别存储视频和播放列表。并在播放列表文档中,存储视频的 id
-
你的查询是正确的,验证
req.params.vidId变量对应ObjectId("61ca1d1ddb66b3c5ff93e0ba")类型ObjectId的值 -
@hhharsha36 是的!这就是问题所在,只需要用
ObjectId()包裹req.params.vidId。我以为猫鼬会自动执行此操作,但我想我错了。非常感谢! -
@DarthApprentice 这是一个有趣的想法,我已经看到其他人这样做了。为什么存储视频 ID 更可取?这不会让访问每个视频变得更加复杂,因为我必须通过它们的 id 搜索每个视频,而不仅仅是在数组中已有视频?
标签: javascript arrays database mongodb mongoose