MongoDB 选择排序问题

Posted

技术标签:

【中文标题】MongoDB 选择排序问题【英文标题】:MongoDB Selection Sort Issue 【发布时间】:2012-11-15 02:23:37 【问题描述】:

我的问题是我想做一个数据库查找(选择)witz 一个分类。 ^^

在我的代码中看起来像:

$return = $db->selectCollection( $category )->find(array("time" > $time_lastweek))->sort(array("rating/count_raitings" => 1,"count_raitings" => 1))->limit(10);

我以前在 SQL (PDO) 中做过这样的事情:

$last_week = $dbh->prepare('SELECT * FROM '.$category.' WHERE time > :zeit ORDER BY rating/count_raitings ASC, count_raitings ASC LIMIT 10');
        $last_week->execute(array(':zeit' => $time_lastweek));
        $return = $last_week->fetchAll(PDO::FETCH_CLASS);

请任何人帮助我。 MongoDB 的东西对我不起作用。

【问题讨论】:

你不能用 find 查询来做到这一点。您必须为此使用聚合框架。 我怎么能在这个框架中做到这一点? 我发布了一个答案,展示了如何使用 agg 框架来做到这一点。 【参考方案1】:

以下是在 shell 中使用 aggregation framework 的方法(应该可以直接转换为 php):

db.category.aggregate([
    // Filter the docs to those where time > time_lastweek
     $match: time: $gt: time_lastweek,

    // Identify what to include from each doc, adding a computed field for the division
     $project: 
        time: 1,
        rating: 1,
        count_raitings: 1,
        div_val: $divide: ['$rating', '$count_raitings']
     ,

    // Sort the results
     $sort: div_val: 1, count_raitings: 1,

    // Limit to the top 10
     $limit: 10 
])

【讨论】:

hhmm,那为什么我的 mongodb 说:致命错误:调用未定义的方法 MongoCollection::aggregate() in?? 您的服务器是什么版本的 MongoDB?聚合框架是在 v2.2 中引入的。 如果我对它进行 apt-get update (debian),它说一切都是最新的。 状态显示:版本“2.2.1”进程“mongod” 这是一个 shell 命令,要在 RockMongo 中执行此操作,请参阅 this answer。

以上是关于MongoDB 选择排序问题的主要内容,如果未能解决你的问题,请参考以下文章

如何选择然后对 MongoDB 文档进行排序,然后找到下一个要挖掘的文档?

Scala与Mongodb实践4-----action的具体使用选择出现的属性排序等相关的指令

在 MongoDB 中,如何根据对象的值对对象进行排序?

Mongodb笔记 Index

mongoDB 索引

Js选择排序的问题。我这段代码,为何实现不了。