假设我有 2 个集合,其中每个文档可能如下所示:
收藏1:
target:
_id,
comments:
[
{ _id,
message,
full_name
},
...
]
收藏2:
user:
_id,
full_name,
username
我正在通过 $slice 翻阅评论,假设我获取了前 25 条条目。 从这些条目中,我需要从第二个集合中收到的相应用户名。我想要的是按参考用户名对评论进行排序。问题是我无法将用户名添加到评论中,因为它们可能经常更改,如果是这样,我需要更新旧用户名所在的所有目标文档。 我只能想象一种方法来解决这个问题。读出整个 full_names 并在用户集合中查询它们。结果可以排序,但不会分页,因此需要大量资源才能对大型文档进行排序。
这个问题我有什么遗漏吗?
提前致谢
如果评论是嵌入数组,则必须在客户端对评论数组进行排序,除非按排序顺序存储它。您的应用程序对用户名的要求迫使您要么读出发表评论的用户的所有用户名来进行排序,要么将用户名存储在评论中并进行(更加)困难和昂贵的更新。
除非您可以按排序顺序返回文档,否则排序和分页不起作用。您应该考虑一种不同的模式,其中注释形成一个单独的集合,以便您可以按排序顺序返回它们并对它们进行分页。将用户名存储在每个评论中,以方便 MongoDB 端排序。根据您的应用程序的使用模式,这可能更适合您。
对用户名进行排序并期望/允许用户名频繁更改似乎也很奇怪。如果你可以放弃这些要求,它会让你的生活更轻松:D