2013-02-10 39 views
5

Tôi mới làm quen với MongoDB và tôi phải tạo trang web đơn giản bằng cách sử dụng jsp/servlet.MongoDB nhóm java/chức năng đếm

Tôi cần tạo truy vấn sẽ trả về số lần một số trang web đã được truy cập.

My DB trông như thế này:

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

... và vân vân cho mỗi trang đã được truy cập:

{ "_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"} 

Những gì tôi cần một kết quả mà sẽ giống như thế này là .

Tôi đang sử dụng Java, nhân tiện.

+0

Hãy xem [ 'DBCollection.aggregate'] (http://api.mongodb.org/java/current/) cung cấp truy cập đến của Mongo [khuôn khổ hợp] (http://docs.mongodb.org/manual/applications/aggregation/) khả năng xử lý các truy vấn như thế này. – JohnnyHK

Trả lời

9

Bạn có thể tìm thấy câu lệnh SQL này đến biểu đồ MongoDB http://docs.mongodb.org/manual/reference/sql-aggregation-comparison/ hữu ích.

Đối với câu hỏi trước mắt của bạn:

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

Các println sẽ in:

{ "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

Ty cho câu trả lời Kay. Tôi đã tìm thấy giải pháp tương tự như của bạn. Tôi đã thực hiện nó theo cách này:

 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); 
Các vấn đề liên quan