MongoDB

使用Nosql Manager for MongoDB 管理工具
1.管理工具 模糊查询 
模糊查询条件包含在 ‘/’之间
2.java 连接MongoDB,条件查询


2.1 连接MongoDB服务,并创建连接数据库对象。

// 连接到 mongodb 服务
MongoClient mongoClient = new MongoClient( "127.0.0.1" , 27017 );
// 连接到数据库
MongoDatabase mongoDatabase = mongoClient.getDatabase("articledb");  
System.out.println("Connect to database successfully");
MongoCollection<Document> collection = mongoDatabase.getCollection("article");
MongoCollection<Document> collection_txt = mongoDatabase.getCollection("article_txt");

2.2 添加查询条件

//模糊查询条件
Pattern pattern = Pattern.compile(".*atimo.cn.*", Pattern.CASE_INSENSITIVE);
query.put("url", pattern);//对应表字段名
MongoCursor<Document> cursor = collection.find(query).skip(0).limit(20).iterator();//添加查询条件分页条件

2.3 遍历查询结果

while (cursor.hasNext()) {
Article act = new Article();
//查询出的结果转换成jsonObject,然后进行封装或者直接返回给前端处理。我这是封装成对象了
JSONObject jsonObject = JSONObject.parseObject( cursor.next().toJson().toString());
System.out.println(jsonObject.getString("url"));
  act.setTitle(jsonObject.getString("title"));//
  act.setUrl(jsonObject.getString("url"));//
  unm++;
  System.out.println(unm+"--->"+act);
  //存入redis  
  jedis.lpush("sohu",JSON.toJSONString(act));
}

从Redis取出,遍历

1         String sohu = jedis.rpop("sohu");
2         JSONObject o = (JSONObject) JSONObject.parse(sohu);
3         Article article = JSONObject.toJavaObject(o, Article.class);
4         System.out.println(article.toString());

从队列单个取出,转换为实体

 2.3 游标超时 解决办法 https://blog.csdn.net/u013066244/article/details/82658912

3.使用管理工具写查询语句(统计数量)
数据示例

/* 1 */
{
  "_id" : ObjectId("5badab52ad56c95900632572"),
  "artId" : "5ba36b831f535ce7e4814859",
  "content" : "一看那些细节就知道是245旗舰版",
  "comTime" : ISODate("2018-06-09T11:32:38Z"),
  "_class" : "com.xxx.entity.Comment"
}

/* 2 */
{
  "_id" : ObjectId("5badab52ad56c95900632573"),
  "artId" : "5ba36b831f535ce7e4814859",
  "content" : "他这个是旗舰版的吧(只有旗舰版的座椅才是这个样子的)。旗舰版的动力是180KW,不是小编你说的150KW",
  "comTime" : ISODate("2018-06-04T01:16:28Z"),
  "_class" : "com.xxx.entity.Comment"
}

/* 3 */
{
  "_id" : ObjectId("5badab52ad56c95900632574"),
  "artId" : "5ba36b831f535ce7e4814859",
  "content" : "银行职员往外跑吗?这么自由?",
  "comTime" : ISODate("2018-05-29T07:12:09Z"),
  "_class" : "com.xxx.entity.Comment"
}

统计所有artId出现的次数,这里的 artId 字段是另外一个表的主键 id
 db.comment.aggregate([{$group : {_id : "$artId", count : {$sum : 1}}}]) 

查询artId出现的次数统计,comment为数据库名,使用aggregate函数

统计结果为

{ "_id" : "5bc91e3ead56c90b4680814b", "count" : 900 }
{ "_id" : "5bb37536ad56c91a9feac8b4", "count" : 1173 }
{ "_id" : "5bb36aaaad56c91a9feac8b1", "count" : 1089 }
{ "_id" : "5bb36aaaad56c91a9feac8b0", "count" : 1026 }
{ "_id" : "5bb3304ead56c91a9feac896", "count" : 589 }
{ "_id" : "5bb314e2ad56c91a9feac87e", "count" : 535 }
{ "_id" : "5bb3115ead56c91a9feac87c", "count" : 670 }
{ "_id" : "5bb3115ead56c91a9feac87b", "count" : 582 }
{ "_id" : "5bb30ddaad56c91a9feac87a", "count" : 544 }
{ "_id" : "5bb30ddaad56c91a9feac877", "count" : 587 }
{ "_id" : "5bb30ddaad56c91a9feac876", "count" : 719 }
{ "_id" : "5bb306d2ad56c91a9feac871", "count" : 586 }

统计出每个Id在表中出现的次数。
3.1 扩展 ,查询统计数量在500以上的数据
 db.comment.aggregate([{$group : {_id : "$artId", count : {$sum : 1}}},{$match:{count:{$gt:500}}}]) 
加匹配条件即可。

查询统计数量在200~500之间的
 db.comment.aggregate([{$group : {_id : "$artId", count : {$sum : 1}}},{$match:{count:{$gt:300}}},{$match:{count:{$gt:200}}}]) 
注:artId为统计字段名

 
posted @ 2018-11-14 10:47  atimo  阅读(159)  评论(0编辑  收藏  举报