【发布时间】:2011-04-29 12:40:02
【问题描述】:
我想对 MongoDB 做的是将我的集合“tweets”排序在一个整数字段“points”上,但考虑到现在时间之间的差异,我想从点数中删除秒数,和创建推文的时间。所以按(点 - 时差)排序。
因此,这取决于查询运行的时间。较旧的推文最终会获得较低的分数。
有人可以在 MongoDB(PHP 中)给我看一个这样的例子吗?
【问题讨论】:
标签: php mongodb sql-order-by
我想对 MongoDB 做的是将我的集合“tweets”排序在一个整数字段“points”上,但考虑到现在时间之间的差异,我想从点数中删除秒数,和创建推文的时间。所以按(点 - 时差)排序。
因此,这取决于查询运行的时间。较旧的推文最终会获得较低的分数。
有人可以在 MongoDB(PHP 中)给我看一个这样的例子吗?
【问题讨论】:
标签: php mongodb sql-order-by
MongoDB 在sort() 命令中没有function。
事实上,在object.a > object.b 处执行简单的查找对象需要使用未编入索引的$where clause。
目前解决这个问题的方法是实际计算该字段,然后对其进行排序。
因此,在您的情况下,您将拥有一个值为 (points-time) 的新字段。请注意,如果您打算对此数据进行排序,您可能希望对该字段进行索引。尝试对大量未编制索引的字段进行排序可能会非常慢。
【讨论】:
AFAIK,sort() 不接受function,因此您无能为力。您可能需要考虑在应用层中按时差排序。
【讨论】:
$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);
【讨论】:
这篇文章可能会有所帮助。
MongoDB get all fields + sort by value computed from multiple fields
基本思想是创建一个新对象,该对象具有从旧对象计算出的新属性。然后它对新对象进行排序并返回结果。
【讨论】: