我想用MongoDB做的是在整数字段'points'上对我的集合'tweets'进行排序,但我想从点数中删除秒数,给出现在时间之间的差异,推文创建的时间。所以按顺序排列(点 - 时差)。
因此,它取决于运行查询的时间。较早的推文最终会有较低的分数。
有人可以在MongoDB(用PHP)中向我展示这个例子吗?
答案 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
基本思想是它使用从旧对象计算的新属性创建一个新对象。然后它对新对象进行排序并返回结果。