MongoDb order by计算值

时间:2011-04-29 12:40:02

标签: php mongodb sql-order-by

我想用MongoDB做的是在整数字段'points'上对我的集合'tweets'进行排序,但我想从点数中删除秒数,给出现在时间之间的差异,推文创建的时间。所以按顺序排列(点 - 时差)。

因此,它取决于运行查询的时间。较早的推文最终会有较低的分数。

有人可以在MongoDB(用PHP)中向我展示这个例子吗?

4 个答案:

答案 0 :(得分:2)

MongoDB在function命令中没有sort()

事实上,执行object.a > object.b所需的简单查找对象需要使用未编入索引的$where clause

现在的方法是实际计算该字段然后对其进行排序。

因此,在您的情况下,您将拥有一个值为(points-time)的新字段。请注意,如果您计划对此数据进行排序,则可能需要将该字段编入索引。尝试对大量未编入索引的字段进行排序可能会非常慢。

答案 1 :(得分:1)

AFAIK,sort()不接受function,所以你无能为力。您可能需要考虑按应用层中的时差进行排序。

答案 2 :(得分:0)

$m = new Mongo(); // connect
$collection = 'collection_name';
$db = $m->selectDB('mongodb_name');
$cursor = $db->$collection->find();
$cursor->sort(array('day' => -1));
$items = iterator_to_array($cursor);

答案 3 :(得分:0)

这篇文章可能有所帮助。

MongoDB get all fields + sort by value computed from multiple fields

基本思想是它使用从旧对象计算的新属性创建一个新对象。然后它对新对象进行排序并返回结果。