2013-02-10 18 views
5

मैं मोंगोडीबी के लिए नया हूं, और मुझे jsp/servlet का उपयोग करके सरल साइट बनाना है।मोंगोडीबी जावा समूह/गिनती समारोह

मुझे एक निर्माण क्वेरी की आवश्यकता है जो इस बात की गिनती वापस करेगी कि कितनी बार कुछ साइट देखी गई है। हर पृष्ठ कि दौरा किया गया है के लिए

page: localhost:8080/mongoProjekat/treca visited: n(times)<br> 
page: localhost:8080/mongoProjekat/druga visited: n(times) 

... और इतने पर:

{ "_id" : { "$oid" : "5117fa92f1d3a4093d0d3902"} , "ip" : "127.0.0.1" , "datum" : { "$date" : "2013-02-10T19:52:50.051Z"} , "odlaznaStr" : "localhost:8080/mongoProjekat/" , "dolaznaStr" : "localhost:8080/mongoProjekat/treca"}<br> 
{ "_id" : { "$oid" : "5117fa92f1d3a4093d0d3903"} , "ip" : "127.0.0.1" , "datum" : { "$date" : "2013-02-10T19:52:50.796Z"} , "odlaznaStr" : "localhost:8080/mongoProjekat/treca.jsp" , "dolaznaStr" : "localhost:8080/mongoProjekat/peta"}<br> 
{ "_id" : { "$oid" : "5117fa93f1d3a4093d0d3904"} , "ip" : "127.0.0.1" , "datum" : { "$date" : "2013-02-10T19:52:51.141Z"} , "odlaznaStr" : "localhost:8080/mongoProjekat/peta.jsp" , "dolaznaStr" : "localhost:8080/mongoProjekat/treca"}<br> 
{ "_id" : { "$oid" : "5117fa93f1d3a4093d0d3905"} , "ip" : "127.0.0.1" , "datum" : { "$date" : "2013-02-10T19:52:51.908Z"} , "odlaznaStr" : "localhost:8080/mongoProjekat/treca.jsp" , "dolaznaStr" : "localhost:8080/mongoProjekat/cetvrta"}<br> 
{ "_id" : { "$oid" : "5117fa94f1d3a4093d0d3906"} , "ip" : "127.0.0.1" , "datum" : { "$date" : "2013-02-10T19:52:52.035Z"} , "odlaznaStr" : "localhost:8080/mongoProjekat/treca.jsp" , "dolaznaStr" : "localhost:8080/mongoProjekat/cetvrta"}<br> 
{ "_id" : { "$oid" : "5117fa94f1d3a4093d0d3907"} , "ip" : "127.0.0.1" , "datum" : { "$date" : "2013-02-10T19:52:52.197Z"} , "odlaznaStr" : "localhost:8080/mongoProjekat/cetvrta.jsp" , "dolaznaStr" : "localhost:8080/mongoProjekat/treca"} 

क्या मैं जरूरत है एक नतीजा यह है कि कुछ इस तरह दिखेगा:

मेरे डीबी इस तरह दिखता है ।

मैं जावा का उपयोग कर रहा हूं।

+0

पर एक नजर डालें [ 'DBCollection.aggregate'] (http://api.mongodb.org/java/current/) कि मोंगो के [एकत्रीकरण ढांचा] तक पहुंच प्रदान करता है: मैं इसे इस तरह से किया है (http://docs.mongodb.org/manual/applications/aggregation/) इस तरह के प्रश्नों को संभालने के लिए क्षमताओं। – JohnnyHK

उत्तर

9

आप इस एसक्यूएल को MongoDB चार्ट http://docs.mongodb.org/manual/reference/sql-aggregation-comparison/ सहायक में पा सकते हैं।

अपने तत्काल प्रश्न के लिए के रूप में:

// getCollection 

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

    // for the $group operator 
    // note - the collection still has the field name "dolaznaStr" 
    // but, to we access "dolaznaStr" in the aggregation command, 
    // we add a $ sign in the BasicDBObject 

    DBObject groupFields = new BasicDBObject("_id", "$dolaznaStr"); 

    // we use the $sum operator to increment the "count" 
    // for each unique dolaznaStr 
    groupFields.put("count", new BasicDBObject("$sum", 1)); 
    DBObject group = new BasicDBObject("$group", groupFields); 


    // You can add a sort to order by count descending 

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


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

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

println प्रिंट होगा:

{ "serverUsed" : "localhost/127.0.0.1:27017" , 
    "result" : [ { "_id" : "localhost:8080/mongoProjekat/treca" , "count" : 3} , 
       { "_id" : "localhost:8080/mongoProjekat/cetvrta" , "count" : 2} , 
       { "_id" : "localhost:8080/mongoProjekat/peta" , "count" : 1}] , 
    "ok" : 1.0} 
0

जवाब Kay के लिए Ty। मुझे पहले से ही समाधान मिला है जो आपके जैसा है।

 DBObject match = new BasicDBObject("stranica","$dolaznaStr"); 
    DBObject project = new BasicDBObject("$project",match); 

    DBObject id = new BasicDBObject("_id",new BasicDBObject("stranica","$stranica")); 
    id.put("posete", new BasicDBObject("$sum", 1)); 
    DBObject group = new BasicDBObject("$group",id); 

    DBObject srt = new BasicDBObject("posete",-1); 
    DBObject sort = new BasicDBObject("$sort", srt); 
    AggregationOutput ao = collection.aggregate(project, group, sort); 
संबंधित मुद्दे