在猫鼬中使用.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
…)。然后,即使歌曲被删除,您仍然可以向用户显示一些内容。
但是,如果更改了原始歌曲文档,您仍然需要为所有用户更新这些附加信息。