簡體   English   中英

MongoDB 文檔設計決策

[英]MongoDB design decision for Documents

我正在為一個小型社交網絡構建一個 API,我遇到了一個我必須做出的設計決定。 我正在使用 Express 和 MongoDB 和 mongoose 來處理數據庫。

我有兩個文檔:用戶和帖子。 我希望用戶能夠將帖子標記為他們的收藏夾。 我想出了兩種不同的實現方式:

選項 A:將收藏夾保存在用戶文檔中。 它可以輕松顯示用戶所有喜歡的帖子。 但是我將如何查詢喜歡特定帖子的用戶?

UserSchema:
   favorite_posts: [
      {
         type: mongoose.Schema.Types.ObjectId,
         ref: "posts"
      }
   ]

選項 B:保存用戶,點擊發布文檔中的收藏按鈕。 這樣做的好處是,您可以輕松顯示所有收藏帖子的用戶。 但是我如何列出一個特定用戶標記為收藏的所有帖子。

PostSchema:
   users_favorited: [
      {
         type: mongoose.Schema.Types.ObjectId,
         ref: "users"
      }
   ]

有人可以解釋我如何查詢這些東西嗎? 我沒有從文檔中變得更聰明...... :(

正如評論中已經提到的那樣,您最好的選擇是連接表以使:m 關系工作。 ZCCADCDEDB567ABAE643E15DCF0974E503Z 確實通過常規查詢中的 populate() 功能或聚合中的 $lookup-step 來模擬 sql 內連接功能。 所以基本上創建一個名為“likes”的表,它只包含對用戶和帖子的引用。 使用聚合框架,您可以輕松查詢用戶的所有喜歡或帖子上的所有喜歡,首先使用 $match 運算符,然后按用戶或帖子的 $group 和 $push 創建所有喜歡的數組用戶或反之亦然,然后使用 $lookup 步驟加入所需的數據。

但是,正如您所描述的,您可以將所有收藏夾放在用戶文檔或發布文檔的數組中,但除非您確定這些 arrays 不會變大,否則我建議您不要這樣做,因為 mongoDb 不是為這種用途而設計的,您很快就會遇到性能問題。 有關更多信息,請參閱http://www.askasya.com/post/largeembeddedarrays/

如果您要通過 userid 查詢很多,您可以在收藏夾文檔中添加一個 userid 列。 這將節省查詢/連接/聚合

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM