[英]While using .populate() in mongoose how to fetch and add, ObjectIds with additional properties to array(returned by .populate()) whose document in
在 mongoose 中使用.populate() 时如何获取和添加具有附加属性的 ObjectIds 到数组(由.populate() 返回),其集合中的文档不再存在?
我的问题是关于 MongoDB mongoose.populate() 我有 2 个集合:
用户:
likedSongs: [objectId()]
playlists:
songs: [ObjectId()}
creator:
songs: [ObjectId()]
歌曲:
_id: ObjectId() ( Default )
还有其他字段但与此问题无关
用户 uA 是歌曲 sA 的创作者,一些其他用户 [oU] 已将 sA 添加到他们喜欢的歌曲和播放列表中。 在添加新歌和删除歌曲时,我还从 uA.creator 添加和删除 songId,但是我不可能从每个用户 [oU] 的喜欢的歌曲和播放列表中删除 sA 的 songId。 因为它会增加服务器的负载。
所以我想做的是在填充 ObjectId 时,我想为每个未找到的 songId 添加一个“空”属性,然后询问前端的用户是否要删除“不再存在”的歌曲,如果是这样,那么从那里进行 API 调用以将其删除
但问题是,after.populate() mongoose 只返回一个 ObjectIds 匹配的歌曲数组,我不知道如何获取歌曲不再存在的 ObjectIds,并将它们添加到我从中获得的数组中。populate ()
我知道,我不太擅长解释问题,但如果你能理解请给出解决方案。 我可以使用 mongoose 中的任何方法或函数吗?
这是不可能的。 在.populate()
期间,MongoDB 实际上会进行另一个数据库调用以从另一个集合中获取额外信息。 由于您已经删除了一些文档,MongoDB 在填充期间无法找到它们。
你可以做什么重构你的模式模型,所以不是只保存每首歌曲的 ObjectIds,你还可以存储一些其他属性用于显示目的( song name
, song duration
......)。 然后,即使歌曲被删除,您仍然可以向用户显示一些内容。
但是,如果更改了原始歌曲文件,您仍然需要为所有用户更新这些附加信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.