[英]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.