mongdb的基本操作
博客专区 > 小翔 的博客 > 博客详情
mongdb的基本操作
小翔 发表于3年前
mongdb的基本操作
  • 发表于 3年前
  • 阅读 30
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

摘要: 没怎么用过mongdo,邻时报下佛脚。感觉这个东东比写sql麻烦;
package com.xxx.test;
import java.net.UnknownHostException;
import java.util.List;
import java.util.Set;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.mongodb.BasicDBList;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.MongoClient;
public class MongoDbTest {
 private static Logger logger = LoggerFactory.getLogger(MongoDbTest.class);
 public DB db;
 MongoClient mongoClient;
 @Before
 public void befor() {
  try {
   mongoClient = new MongoClient("localhost", 27017);
   db = mongoClient.getDB("zxdb_wf");
   // boolean auth = db.authenticate(myUserName, myPassword);
  } catch (UnknownHostException e) {
   logger.error(e.getMessage(), e);
  }
 }
 @After
 public void after() {
  mongoClient.close();
 }
 /**
  * 测试显示当前库的集合
  */
 @Test
 public void showCollections() {
  Set<String> colls = db.getCollectionNames();
  for (String s : colls) {
   System.out.println(s);
  }
 }
 /**
  * 测试新增
  */
 @Test
 public void insert() {
  DBCollection coll = db.getCollection("serv_trans");
  for (int i = 1; i < 101; i++) {
   BasicDBObject doc = new BasicDBObject("prov", "23")
     .append("serv_id", 998300500000003123l + i)
     .append("cust_id", 991100110000000702l + i)
     .append("product_id", 235010000 + i)
     .append("agreement_id", "20140420004919347232");
   coll.insert(doc);
  }
 }
 @Test
 public void find() {
  DBCollection coll = db.getCollection("serv_trans");
  DBObject obj = coll.findOne();
  System.out.println(obj);
  DBObject query = new BasicDBObject();
  query.put("prov", "24");
  obj = coll.findOne(query);
  System.out.println(obj);
  // 注意查不到结果是直接为null;
  query = new BasicDBObject();
  query.put("prov", "23");
  query.put("serv_id", 998300500000003124l);
  obj = coll.findOne(query);
  System.out.println(obj);
  // 如果类型不对,是查不到数据的。通过测试得知
  query = new BasicDBObject();
  query.put("prov", "23");
  query.put("serv_id", "998300500000003124");
  obj = coll.findOne(query);
  System.out.println(obj);
  // or查询条件查询
  BasicDBList orquery = new BasicDBList();
  query = new BasicDBObject();
  query.put("serv_id", 998300500000003123l);
  orquery.add(query);
  query = new BasicDBObject();
  query.put("serv_id", 998300500000003124l);
  orquery.add(query);
  DBObject queryKeys = new BasicDBObject();
  queryKeys.put("$or", orquery);
  DBCursor dbCursor = coll.find(queryKeys);
  System.out.println(queryKeys);
  while (dbCursor.hasNext()) {
   obj = dbCursor.next();
   System.out.println("输出结果:" + obj);
  }
  // or查询条件查询
  //构建or查询
  orquery = new BasicDBList();
  query = new BasicDBObject();
  query.put("serv_id", 998300500000003123l);
  orquery.add(query);
  query = new BasicDBObject();
  query.put("serv_id", 998300500000003124l);
  orquery.add(query);
  DBObject queryref = new BasicDBObject();
  queryref.put("$or", orquery);
  //购建显示列
  DBObject querykey = new BasicDBObject();
  querykey.put("_id", 0);
  querykey.put("prov", 1);
  querykey.put("serv_id",1);
  
  dbCursor = coll.find(queryref,querykey);
  System.out.println(queryref);
  System.out.println(queryKeys);
  while (dbCursor.hasNext()) {
   obj = dbCursor.next();
   System.out.println("输出结果:" + obj);
  }
  
  //进行分页查询(可以看到是skip(i)这个i是指过滤了i条记录)
  System.out.println("分页显示处理");
  query = new BasicDBObject();
  query.put("prov", "23");
  List<DBObject> list= coll.find(query).skip(0).limit(5).toArray();
  for(DBObject dbobj:list){
   System.out.println("输出结果:" + dbobj);
  }
  System.out.println("分页显示处理1");
  list= coll.find(query).skip(2).limit(5).toArray();
  for(DBObject dbobj:list){
   System.out.println("输出结果:" + dbobj);
  }
  
 }
 
 /**
  * 更新操作
  */
 @Test
 public void update(){
  DBCollection coll = db.getCollection("serv_trans");
  
  DBObject query = new BasicDBObject();
  query.put("serv_id", 998300500000003125l);
  //构建显示列
  DBObject update = new BasicDBObject()
          .append("serv_id", 998300500000003125l)
    .append("cust_id", 991100110000000704l)
    .append("product_id", 235010002l)
    .append("agreement_id", "20140420004919347235");
  DBObject obj = coll.findOne(query);
  System.out.println(obj);
  obj = coll.findAndModify(query, update);
  System.out.println(obj);
  //可以看到这个findAndModify查到的结果是query查询出来的结果,不是显示的是更新后的结果,这个有点坑
  obj = coll.findOne(query);
  System.out.println(obj);
  //findAndModify有更多重写方法,可以让它返回修改后的数据
  //update()方法也是有的
  //http://api.mongodb.org/java/current/overview-summary.html
 }
 
 @Test
 public void delete(){
  DBCollection coll = db.getCollection("serv_trans");
  
  DBObject query = new BasicDBObject();
  query.put("serv_id", 998300500000003130l);
  DBObject obj = coll.findOne(query);
  System.out.println(obj);
  /**
  coll.remove(query);
  obj = coll.findOne(query);
  System.out.println(obj);
  */
  //执行以下的删除方法后进行查询很诡异
  obj=coll.findAndRemove(query);
  System.out.println(obj);
  obj = coll.findOne(query);
  System.out.println(obj);
  //第一次3个都能打印出来,为什么第一次的最后一个打印会有数据
  //第二次只能打印现来2个,为什么第二次的时候又正确了,第三的一打印又没有了。
  //第三次全为null,为什么第3的一次才全部为null了
  //findAndRemove不大好用,有空再研究......
 }
 
 
}

标签: mongdb
共有 人打赏支持
粉丝 11
博文 33
码字总数 19344
×
小翔
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: