根据出现次数在mongo中排序

时间:2012-12-07 05:29:38

标签: java mongodb mongodb-query

我需要在我的网络应用中实现“热门关键字”,这样大多数搜索过的关键字都会显示在那里。为此我已经在mongo中创建了一个数据库。我需要从mongo中检索数据,以便主要出现的关键字应该排序并应该返回到我的页面。在sql中它就像, select names,count(names) from keyword_db group by names order by names;

需要java代码和mongo shell查询..

2 个答案:

答案 0 :(得分:3)

你可能想尝试mongo shell查询(我按降序排序:

db.keyword_db.aggregate ( [ 
   { $group: { _id: "$names", count: { $sum: 1 } } }, 
   { $sort: { count: -1 } }  ] )

对于Java版本:

    DBCollection myColl = db.getCollection("keyword_db"); 

    // for the $group operator
    DBObject groupFields = new BasicDBObject( "_id", "$names");
    groupFields.put("count", new BasicDBObject( "$sum", 1));

    DBObject group = new BasicDBObject("$group", groupFields );

    // for the $sort operator

    DBObject sortFields = new BasicDBObject("count", -1);

    DBObject sort = new BasicDBObject("$sort", sortFields );

    // run the aggregation

    AggregationOutput output = myColl.aggregate(group, sort);

    System.out.println( output.getCommandResult() );

以下页面也可以帮助您:
   http://docs.mongodb.org/manual/reference/sql-aggregation-comparison/

答案 1 :(得分:1)

对于排序,您可以使用以下..1表示升序,-1表示desc。

db.keyword_db.find( { names: "A" } ).sort( { user_id: 1 } )

和groupBy您可以使用聚合框架..

http://docs.mongodb.org/manual/reference/method/db.collection.group/