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 文档进行排序,然后找到下一个要挖掘的文档?