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

dav*_*eet 7 php mongodb

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

从这些我需要max 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)
Run Code Online (Sandbox Code Playgroud)

Sam*_*aye 7

你不能做一个排序,然后限制,然后排序.Cursor对象正是如此,它将不会运行查询,直到您迭代到第一个结果,通过getNext()该结果手动运行或foreach不仅在循环内,但sort只是对象的属性,因此使两个排序只是覆盖属性.

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

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

这将始终选择组中的最高值user_id(在此类末尾发生),这将产生与进行两种排序相同的结果.