gpt4 book ai didi

php - 排序后限制后的mongo排序 - 不工作

转载 作者:IT老高 更新时间:2023-10-28 13:20:38 27 4
gpt4 key购买 nike

我有一个集合,我使用 $query 从中获取特定类型的用户
然后我需要根据 user_id 升序对它们进行排序并将它们限制为 2000

从这些我需要最大的 user_id,所以我按降序对它们进行排序并限制为 1。

但是第二次排序忘记了 2000 的限制,并从 find() 对整个光标进行排序。

有什么解决方法吗?

$cursor = $collection   ->find($query)                // too many entries
->sort(array('user_id'=>1)) // go ascending
->limit(2000) // got our limited qouta
->sort(array('user_id'=>-1)) // go descending to get max
->limit(1); // the one with max(user_id)

最佳答案

您不能先进行排序,然后进行限制,然后再进行排序。 Cursor 对象就是这样,它不会运行查询,直到您通过 getNext() 迭代到第一个结果,该结果可以手动运行或在 foreach 循环中运行但是 sort 只是对象的一个​​属性,因此进行两种排序只会覆盖该属性。

实现您的目标的最佳方式是:

$doc = $collection->find($query)->sort(array('user_id' => 1))
->skip(1999)->limit(1)->getNext();

这将始终选择组中最高的 user_id(出现在此排序的末尾),这将给出与进​​行两次排序相同的结果。

关于php - 排序后限制后的mongo排序 - 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14423646/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com