如何加入一个集合并对其进行排序,同时限制MongoDB中的结果

时间:2014-08-02 17:19:31

标签: mongodb sorting paging nosql

假设我有2个集合,其中每个文档可能如下所示:

收集1:

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

收集2:

user:
        _id,
        full_name,
        username

我通过$ slice翻阅评论,假设我拿前25个条目。 从这些条目我需要相应的用户名,我从第二个集合收到。我想要的是按其引用用户名排序注释。问题是我无法在评论中添加用户名,因为它们可能经常更改,如果是这样,我需要更新旧用户名所在的所有目标文档。 我只能想象一种方法来解决这个问题。读出整个full_names并在用户集合中查询它们。结果将是可排序的,但它没有被分页,因此使用大型文档需要大量资源。

这个问题我有什么遗漏吗?

提前致谢

1 个答案:

答案 0 :(得分:0)

如果注释是嵌入式数组,则必须在客户端进行工作以对注释数组进行排序,除非按排序顺序存储它。您对用户名的应用程序要求会强制您读出评论要进行排序的用户的所有用户名,或者将用户名存储在评论中并且(更多)更加困难和昂贵的更新。

排序和分页不起作用,除非您可以按排序顺序返回文档。您应该考虑一个不同的模式,其中注释形成一个单独的集合,以便您可以按排序顺序返回它们并对它们进行分页。将用户名存储在每个注释中以便于MongoDB端的排序。根据您的应用程序的使用模式,这可能对您更有效。

对用户名进行排序并期望/允许用户名经常更改似乎也很奇怪。如果你可以放弃这些要求,那就会让你的生活更轻松:D