排序如何在MongoDB中运行?

时间:2014-03-31 23:05:41

标签: mongodb

我有这个问题:( Doctrine2 ODM)

    ....
->field('coordinates')
                ->near(
                (float)$lat,
                (float)$lng)
->field('date')
                ->lte($lastdate)
                ->sort('date','desc')
                ->limit(9)
                ->getQuery()
                ->execute()
                ->toArray();

它为我提供了以下日期的文件:(示例)

2014-03-31 01:51:06
2014-03-31 01:51:02
2014-03-31 01:50:46
2014-03-31 01:50:07

如果我将限制更改为20,例如,我会收到这些日期:

2014-03-31 01:52:01
2014-03-31 01:51:42
2014-03-31 01:51:16
2014-03-31 01:51:06

我的问题是为什么在第一个查询中跳过了这些日期? mongoDB是否收集符合条件的第一批文件然后对它们进行排序? 那将是非常愚蠢的!!

我更改了查询中的顺序(排序后的条件),但似乎没有任何影响.. WTF

2 个答案:

答案 0 :(得分:0)

$near会为您提供最近的文件;它不会让你获得更新的文件。

来自the doc

  

指定地理空间查询首先返回最近文档的点。查询将文档从最近到最远排序。

没有$near

$maxDistance本来就是一种;如果不指定您感兴趣的数据范围,应用取代$near查询的排序将有效地否定$near

您可以将指定$near$geometry的{​​{1}}查询组合以过滤结果集,然后$maxDistance对过滤日期进行排序尽管如此。我没有尝试过,但它会改变你的sort子句的语义,以便它可以工作。

答案 1 :(得分:0)

如果要按距离排序,请使用$ near,但如果要按其他属性排序,请使用$within now $geoWithin运算符,该运算符返回半径范围内的结果而不对其进行排序,允许您对其进行排序不同的标准。