2014-09-30 62 views
0

我有收集类似如何计算集合中的唯一元素?

id : 1, url : youtube.com 

也是一个网址,可以多次,

我需要得到整个收藏和计数独特元素 像

youtube 10 
google 8 
lycos 5 

这里是代码

public List<URLEntity> findAll() { 
     List<URLEntity> list = new ArrayList<URLEntity>(); 
     String sort = "searchDate"; 
     String order = "desc"; 
     DBObject sortCriteria = new BasicDBObject(sort, "desc".equals(order) ? -1 : 1); 

     BasicDBObject query = new BasicDBObject();   
     DBCursor cursor = mongoCoreService.getDomainCollection().find(query).sort(sortCriteria); 
     try { 
      while (cursor.hasNext()) { 
       DBObject document = cursor.next(); 
       URLEntity entity = new URLEntity(); 
       entity = Converter.toObject(URLEntity.class, document); 
       list.add(entity); 
      } 
     } finally { 
      cursor.close(); 
     } 
     return list; 
    } 

谢谢

+1

不清楚你想要的东西在这里,但你可能想看看'Set's。 – Mena 2014-09-30 12:42:40

回答

1

今天,我发现和Java测试的答案,这里是一个代码

DBCollection mycoll= db.getCollection("domain"); 

    DBObject fields = new BasicDBObject("domain", 1); 
    DBObject project = new BasicDBObject("$project", fields); 

    // Now the $group operation 
    DBObject groupFields = new BasicDBObject("_id", "$domain"); 
    groupFields.put("total", new BasicDBObject("$sum", 1)); 
    DBObject group = new BasicDBObject("$group", groupFields); 

    // run aggregation 
    AggregationOutput output = mycoll.aggregate(project, group); 
    System.out.println(output.getCommand().toString()); 

    for (DBObject dbObject : output.results()) { 
     System.out.println(dbObject); 
    } 
3

您可以通过使用MongoDB的聚合框架来实现此目的。

db.yourcollection.aggregate({ $group: { _id: '$url', total: {$sum: 1} }}) 

你会得到这样的事情,你可以在JAVA操作:

{ 
"result" : [ 
    { 
     "_id" : "youtube.com", 
     "total" : 10 
    }, 
    { 
     "_id" : "google.com", 
     "total" : 8 
    }, 
    { 
     "_id" : "lycos", 
     "total" : 5 
    } 
], 
"ok" : 1 
} 
相关问题