簡體   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