我有这个问题:( 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
答案 0 :(得分:0)
$near
会为您提供最近的文件;它不会让你获得更新的文件。
来自the doc:
没有指定地理空间查询首先返回最近文档的点。查询将文档从最近到最远排序。
$near
的 $maxDistance
本来就是一种;如果不指定您感兴趣的数据范围,应用取代$near
查询的排序将有效地否定$near
。
您可以将指定$near
和$geometry
的{{1}}查询组合以过滤结果集,然后$maxDistance
对过滤日期进行排序尽管如此。我没有尝试过,但它会改变你的sort
子句的语义,以便它可以工作。
答案 1 :(得分:0)
如果要按距离排序,请使用$ near,但如果要按其他属性排序,请使用$within now $geoWithin运算符,该运算符返回半径范围内的结果而不对其进行排序,允许您对其进行排序不同的标准。