Mohammed shebin
Mohammed shebin

Reputation: 479

Sorting in mongo according to number of occurences

I need to implement "Popular Keyword" in my web app so that most searched keywords will show there.. For that i have created a db in mongo. I need to retrieve data from mongo so that mostly occuring keywords should sort and should return to my page. In sql it is just like as, select names,count(names) from keyword_db group by names order by names;

need both java code and mongo shell query..

Upvotes: 0

Views: 2894

Answers (2)

arjun3037
arjun3037

Reputation: 17

For sorting you can use following..1 for ascending and -1 for desc.

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

and for groupBy You can use Aggregation framework..

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

Upvotes: 1

Kay
Kay

Reputation: 3012

You might want to try for the mongo shell query (I'm sorting in descending order:

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

For the Java version:

    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() );

The following page may help you also:
http://docs.mongodb.org/manual/reference/sql-aggregation-comparison/

Upvotes: 3

Related Questions