【问题标题】:MongoDb order by to be computed valueMongoDb order by 要计算的值
【发布时间】:2011-04-29 12:40:02
【问题描述】:

我想对 MongoDB 做的是将我的集合“tweets”排序在一个整数字段“points”上,但考虑到现在时间之间的差异,我想从点数中删除秒数,和创建推文的时间。所以按(点 - 时差)排序。

因此,这取决于查询运行的时间。较旧的推文最终会获得较低的分数。

有人可以在 MongoDB(PHP 中)给我看一个这样的例子吗?

【问题讨论】:

    标签: php mongodb sql-order-by


    【解决方案1】:

    MongoDB 在sort() 命令中没有function

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

    目前解决这个问题的方法是实际计算该字段,然后对其进行排序。

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

    【讨论】:

      【解决方案2】:

      AFAIK,sort() 不接受function,因此您无能为力。您可能需要考虑在应用层中按时差排序。

      【讨论】:

        【解决方案3】:
        $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);
        

        【讨论】:

          【解决方案4】:

          这篇文章可能会有所帮助。

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

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

          【讨论】:

            猜你喜欢
            • 2015-01-08
            • 2019-03-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-11-29
            • 2022-01-05
            相关资源
            最近更新 更多