【发布时间】:2013-09-15 23:44:42
【问题描述】:
我有一个像这样的comment 收藏
{
_id: 'c1',
text: 'comment 1',
votes: 1,
replies: [
{
_id: 'r1',
text: 'reply 1',
isReply: true,
votes: 3
},
{
_id: 'r2',
text: 'reply 2',
isReply: true,
votes: 0
}
]
},
{
_id: 'c2',
text: 'comment2',
votes: 2,
replies: []
}
这个想法是一个评论可以有很多回复。所有 cmets 和回复都有 id、text、votes。我怎样才能获得最好的 2 条评论或回复,获得最多的票。在给定的情况下,这将是“回复 1”和“评论 2”。
我可以向 mongodb 发送 1 个请求以获得最好的 2 个 cmets,另一个请求获得最好的 2 个回复,然后比较它们以获得我想要的。
但是,只有 1 个对 mongodb 的请求是否有可能,我可以得到这样的结果?
[
{
_id: 'r1',
text: 'reply 1',
isReply: true,
votes: 3
},
{
_id: 'c2',
text: 'comment 2',
votes: 2
}
]
或者更好的是我可以将评论/回复展平以获得按votes 排序的评论或回复列表吗?
在这种情况下,它将是 [r1, c2, c1, r2] 分别具有它们的属性
谢谢。
更新:
我尝试了aggregate({$unwind: '$replies'}),但我仍然有 2 个不同级别的 cmets 和回复,我无法通过使用聚合框架进行比较。也许有办法将这两个级别变平,我对 mongodb 很陌生。
【问题讨论】:
-
您能否编辑您的问题以包含您尝试过的聚合管道的详细信息?我想你可能需要做这样的事情:docs.mongodb.org/manual/tutorial/…
-
您需要所有属性还是仅其 id 和投票数就足够了?即 [{id:'r1',votes:X} 等]?
-
@AsyaKamsky 我还需要结果示例中所述的其他属性。
标签: mongodb aggregation-framework