一千萬個為什麽

搜索

如何加入集合並對其進行排序,同時將結果限制在MongoDB中

可以說我有兩個集合,其中每個文檔可能如下所示:

收藏1:

target:
      _id,
      comments:
      [
       { _id,
         message,
         full_name
       },
       ...
      ]

收藏2:

user:
        _id,
        full_name,
        username

我通過$ slice的評論進行分頁,假設我拿到了前25條。 從這些條目我需要相應的用戶名,我從第二集合收到。我想要的是按照他們的參考用戶名排序的評論。問題是我無法將用戶名添加到評論中,因為他們可能會經常更改,如果是這樣,我需要更新所有目標文檔,舊用戶名所在的位置。 我只能想出一個辦法來解決這個問題。讀出整個full_names並在用戶集合中查詢它們。結果是可排序的,但它不是分頁的,因此需要大量資源來處理大文檔。

有什麽我錯過了這個問題?

提前致謝

最佳答案

如果註釋是一個嵌入式數組,您將不得不在客戶端上對註釋數組進行排序,除非按照排序順序進行存儲。您對用戶名的應用程序要求強迫您讀出評論進行排序的用戶的所有用戶名,或者將用戶名存儲在註釋中,並且(更多)更難以更昂貴的更新。

排序和分頁不起作用,除非您可以按排序順序返回文檔。您應該考慮一個不同的模式,其中註釋形成一個單獨的集合,以便您可以按排序順序返回它們並對它們進行分頁。在每個評論中存儲用戶名,以方便在MongoDB端進行排序。根據您的應用程序的使用模式,這可能對您更好。

排序用戶名和預期/允許用戶名頻繁更改似乎也很奇怪。如果你可以放棄這些要求,它會讓你的生活更輕松:D

轉載註明原文: 如何加入集合並對其進行排序,同時將結果限制在MongoDB中