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



在猫鼬中使用.populate()如何获取和添加,具有额外属性的ObjectIds到数组(由.populate()返回),其集合中的文档不再存在?

我的问题是关于MongoDB mongoose .populate()我有两个集合:

用户:

likedSongs: [objectId()]
playlists:
songs: [ObjectId()}
creator:
songs: [ObjectId()]

歌曲:

_id: ObjectId() ( Default )

还有其他与这个问题无关的领域

用户uA是歌曲sA的创建者,并且一些其他用户[oU]已将sA添加到他们的喜欢歌曲和播放列表中。在添加新歌和删除歌曲时,我还会在ui .creator中添加和删除songId,但我不可能从每个用户的喜欢歌曲和播放列表中删除sA的歌曲id。因为这会增加服务器的负载。

我想做的是在填充ObjectIds时,我想添加一个' empty ';属性赋给未找到的每个歌曲id,然后询问前端的用户是否想要删除"不再存在"的歌曲,如果是,那么从那里调用API来删除它

但是问题是,在.populate()之后,mongoose只返回ObjectIds匹配的歌曲数组,我不知道如何取回歌曲不存在的ObjectIds,并将它们与我从。populate()

中得到的数组相加我知道,我不是很擅长解释问题,但如果你能理解,请给一个解决方案。在mongoose中有我可以使用的方法或功能吗?

不可能。在.populate()期间,MongoDB实际上会去做另一个数据库调用,从其他集合中获取额外的信息。因为你已经删除了一些文档,所以MongoDB在填充过程中找不到它们。

你能做的是重构你的模式模型,而不是只保存每首歌的ObjectIds,你将额外存储一些其他属性用于显示目的(song name,song duration…)。然后,即使歌曲被删除,您仍然可以向用户显示一些内容。

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

最新更新