繁体   English   中英

在 mongoose 中使用.populate() 时如何获取和添加具有附加属性的 ObjectIds 到数组(由.populate() 返回),其文档在

[英]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 namesong duration ......)。 然后,即使歌曲被删除,您仍然可以向用户显示一些内容。

但是,如果更改了原始歌曲文件,您仍然需要为所有用户更新这些附加信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM