猿问

两个独立的 MongoDB 集合将结果组合起来进行循环,没有任何关系

我正在尝试创建一个包含投票和评论的活动源。两个集合之间没有任何关系。


获取评论:


$CommentsCollection = $this->db->comments;

$options = ['sort' => ['created' => -1], 'limit' => 15];

$data = array ();

$resultComments = $CommentsCollection->find($data, $options);

要获得选票:


$VotesCollection = $this->db->votes;

$options = ['sort' => ['created' => -1], 'limit' => 15];

$data = array ();

$resultVotes = $VotesCollection->find($data, $options);

现在,我如何组合这两个单独的、不相关的集合结果并按创建(日期)对它们进行排序。


我认为聚合或查找不是正确的方法,因为这两个表不相关。我只想合并结果并按日期排序,以便我可以循环并将它们显示在活动源上。


偶然的你
浏览 122回答 2
2回答

慕慕森

我所做的是使用:$finalArray = array_merge($resultComments, $resultVotes);合并结果。然后按日期排序:  usort($finalArray, function($a, $b) {         return strtotime($a['created']) - strtotime($b['created']);   });是我想多了。

牧羊人nacy

无需中间收集,有两种方式。unionWith您可以从 4.4 版本开始使用-参考但如果你的收藏量很大的话我不推荐。您应该在后端合并。发出两个 http 请求并对结果进行排序。因为你得到了 30 条记录,所以后端速度会很快。
随时随地看视频慕课网APP
我要回答