我有一个用于个人资料评论的Mongo集合,其结构如下:
{
"_id": "",
"comments": []
}
id指的是profiles集合中用户的ID。为了提高服务器功率,我只想在每页显示10条评论。为此,我使用Mongo的$slice运算符。这是我的查询代码。
mongoCols.profileComments.findOne({"_id":doc._id},{comments:{$slice:[(comPage-1)*10,10]}},function(err,doc) {
这是问题所在。我想以相反的顺序显示注释,这意味着最新的注释在第一页上,最新的注释在最后。我想到了一些解决方案,但它们效率不高。
1)我可以检索整个数组,然后使用JavaScript(我使用nodejs)对该数组进行排序,然后只获取我想要的10个元素。这似乎效率低下,因为当我只需要10时,我要求Mongo检索数组中可能有大量元素的内容。
2)我可以将每个评论作为单独的文档,并在一个字段中说明评论的用户。然后,我只能找到将评论发送给所请求用户的文档,并使用skip和limit选项仅检索我想要的10个文档。我的问题是每次请求用户评论时,Mongo都必须经历几乎每一条评论。这似乎效率低下,但到目前为止这是我最好的解决方案。
我更愿意保留我目前拥有的结构,但如果我需要改变它的工作方式,那么我会遵守。