java 对mongodb的操作
1.1Java连接mongodb数据库
users.insert(data1);//等同于users.save(data1);
[/code]
3.3.2第二中插入方式
BasicDBObjectBuilderdata1 =BasicDBObjectBuilder.start().add(...).add(...); users.insert(data1.get());//等同于users.save(data1.get());
3.3.3第三种插入方式 Map<String, Object> data1 = new HashMap<String, Object>(); data1.put(...); …… users.insert(new BasicDBObject(data1));//等同于users.save(new BasicDBObject(data1) );
3.3.4第四中插入方式 String json = "{'database': 'mkyongDB','table' : 'hosting'," + "'detail' : {'records' : 99, 'index' : 'vps_index1', 'active' :'true'}}}"; DBObject data1 = (DBObject)JSON.parse(json); users.insert(data1);//等同于users.save(data1);
3.4java对collection的查询操作
==================================== DBObject fields = new BasicDBObject(); fields.put("_id", false); fields.put("tag", true); fields.put("tv_sec", true);
DBCursor cur = users.find(query, fields); 可以用来过滤不需要获取的字段, 减少IO ====================================
3.4.1查询所有的数据find() DBCursor cur = users.find(); while(cur.hasNext()){...}
3.4.2查询id大于等于1的记录,并且只取10条记录 DBCursor cur = users.find(newBasicDBObject("_id",newBasicDBObject("$gte",1))).limit(10);
3.4.3查询id大于等于1的记录,并按id进行降序-1表示降序,1升序。 DBCursor cur = users.find(new BasicDBObject("_id",newBasicDBObject("$gte",1))).sort(newBasicDBObject("_id",-1)); 3.4.4查询id大于等于1的记录,并跳过前10条记录显示 相当于id>10 DBCursor cur = users.find(newBasicDBObject("_id",newBasicDBObject("$gte",1))).skip(10);
3.4.5查询id大于等于1的记录,跳过前10条记录并且只显示10条记录。相当//于分页功能where id>10 and id<=20 DBCursor cur = users.find(newBasicDBObject("_id", newBasicDBObject("$gte",1))).skip(10).limit(10);
3.4.6查询id大于等于1的所有记录数 返回int型 users.find(newBasicDBObject("_id",newBasicDBObject("$gte",1))).count()
3.4.7findAndRemove() 查询_id=30000的数据,并且删除 users.findAndRemove(newBasicDBObject("_id", 30000));
3.5java对collection的更新操作 查询id为300的记录,将cust_Id的值更新为6533615,一定要注意大小写,以及数据//类型,返回值为int表示所影响的记录条数可以用 users.findOne(newBasicDBObject("_id",300));查看下,会发现这条记录//只返回两个字段了,分别为_id,cust_Id,别的字段都删除了。 users.update(newBasicDBObject("_id",300), newBasicDBObject ("cust_Id","6533615")).getN(); //这种写法可以实现只更新id为300的cust_Id值为6533615,而不删除这条记录的别的字//段属性 users.update(newBasicDBObject("_id",300), newBasicDBObject("$set",newBasicDBObject("cust_Id","6533615"))).getN();
3.6java对collection的删除操作 //移除cust_Id为6533615的数据。注意 用remove方法不释放磁盘空间, //mongodb只在collection中做了标志,没有正在删除。 users.remove(newBasicDBObject("cust_Id","6533615")).getN(); //移除id>=1的数据 users.remove(newBasicDBObject("_id",new BasicDBObject("$gte",1))).getN(); //移除整个collection,drop也不释放磁盘空间 users.drop();
mongodb 小计(查询和导出) $in $gt $lt 分类: 数据库开发技术
mongodb 查询集合之内 > db.roothomesCol.find({"ID":{"$in":[48493297,48701795]}}); mongodb 查询大小之间 > db.roothomesCol.find({"ID":{$gt : 48493297, $lt : 48701795}}); mongo IN 关键字,在集合里面索引限定范围 roothomes $ /mongo/mongodb-2.0.2/bin/mongoexport --host 127.0.0.1 --port 30000 --db roothomesDB -c roothomesCol --query '{"ID":{"$in":[48493297,48701795]}}' --fields _id,AB,AC --csv > roothomes.csv mongodb $gt $lt 关键字,在集合里面索引限定范围 roothomes $ /mongo/mongodb-2.0.2/bin/mongoexport --host 127.0.0.1 --port 30000 --db roothomesDB -c roothomesCol --query '{"ID":{$gt : 48420000, $lt : 48430000}}' --fields _id,AB,AC --csv > roothomes.csv
[/code]
1.1Java连接mongodb数据库
1.1.1连单台mongodb Mongo mg = newMongo();//默认连本机127.0.0.1 端口为27017 Mongo mg = newMongo(ip);//可以指定ip 端口默认为27017
Mongo mg = newMongo(ip,port);//也可以指定ip及端口号
1.1.2连双台mongodb //ip为主机ip地址,port为端口号,dataBaseName相当于数据库名 DBAddress left = new DBAddress("ip:port/dataBaseName");
DBAddress right = new DBAddress("ip:port/dataBaseName");
//若一个mongodb出现问题,会自动连另外一台 Mongo mongo = new Mongo(left, right); 1.1.3连多台mongodb
List<ServerAddress> mongoHostList = newArrayList<ServerAddress>(); mongoHostList.add(newServerAddress("ip",port)); mongoHostList.add(newServerAddress("ip",port)); mongoHostList.add(newServerAddress("ip",port));
Mongo mg = newMongo(mongoHostList);
2.1获取mongodb的db
dataBaseName相当于关系数据库里的数据库名,mongodb中若没有该数据库名也不会报错,默认mongodb会建立这个数据库名,为空。
DB db = mg.getDB(dataBaseName); //注意:mongodb区分大小写,程序中一定要注意 2.2mongodb的db安全认证
若这个时候要想访问db中的collection(相当于关系数据库里的表),就必须通过安全认证才可以访问,否则后台会报您没有通过安全认证。
//安全认证java代码 返回true表示通过,false表示没通过不能进行操作
boolean auth =db.authenticate("userName", "password".toCharArray());
3.1得到mongodb中的db的collection
DBCollection users = db.getCollection(tableName);
参数tableName相当于关系数据库里的表名,若mongodb中没有该tableName,默认会创建该tableName,为空
3.2mongodb中的db的collection自增长主键 Mongodb中也像传统的关系数据库里表一样,有主键(_id)概念,用来唯一标识他们。当用户往collection中插入一条新记录的时候, 如果没有指定_id属性,那么mongodb会自动生成一个ObjectId类型的值,保存为_id的值。 3.3java对collection进行插入操作
3.3.1第一种插入方式
[code="java"] DBObject data1 = newBasicDBObject(); data1.put("cust_Id", "123456"); data1.put("is_Show", 1); data1.put("start_time", newDate());
users.insert(data1);//等同于users.save(data1);
[/code]
3.3.2第二中插入方式
BasicDBObjectBuilderdata1 =BasicDBObjectBuilder.start().add(...).add(...); users.insert(data1.get());//等同于users.save(data1.get());
3.3.3第三种插入方式 Map<String, Object> data1 = new HashMap<String, Object>(); data1.put(...); …… users.insert(new BasicDBObject(data1));//等同于users.save(new BasicDBObject(data1) );
3.3.4第四中插入方式 String json = "{'database': 'mkyongDB','table' : 'hosting'," + "'detail' : {'records' : 99, 'index' : 'vps_index1', 'active' :'true'}}}"; DBObject data1 = (DBObject)JSON.parse(json); users.insert(data1);//等同于users.save(data1);
3.4java对collection的查询操作
==================================== DBObject fields = new BasicDBObject(); fields.put("_id", false); fields.put("tag", true); fields.put("tv_sec", true);
DBCursor cur = users.find(query, fields); 可以用来过滤不需要获取的字段, 减少IO ====================================
3.4.1查询所有的数据find() DBCursor cur = users.find(); while(cur.hasNext()){...}
3.4.2查询id大于等于1的记录,并且只取10条记录 DBCursor cur = users.find(newBasicDBObject("_id",newBasicDBObject("$gte",1))).limit(10);
3.4.3查询id大于等于1的记录,并按id进行降序-1表示降序,1升序。 DBCursor cur = users.find(new BasicDBObject("_id",newBasicDBObject("$gte",1))).sort(newBasicDBObject("_id",-1)); 3.4.4查询id大于等于1的记录,并跳过前10条记录显示 相当于id>10 DBCursor cur = users.find(newBasicDBObject("_id",newBasicDBObject("$gte",1))).skip(10);
3.4.5查询id大于等于1的记录,跳过前10条记录并且只显示10条记录。相当//于分页功能where id>10 and id<=20 DBCursor cur = users.find(newBasicDBObject("_id", newBasicDBObject("$gte",1))).skip(10).limit(10);
3.4.6查询id大于等于1的所有记录数 返回int型 users.find(newBasicDBObject("_id",newBasicDBObject("$gte",1))).count()
3.4.7findAndRemove() 查询_id=30000的数据,并且删除 users.findAndRemove(newBasicDBObject("_id", 30000));
3.5java对collection的更新操作 查询id为300的记录,将cust_Id的值更新为6533615,一定要注意大小写,以及数据//类型,返回值为int表示所影响的记录条数可以用 users.findOne(newBasicDBObject("_id",300));查看下,会发现这条记录//只返回两个字段了,分别为_id,cust_Id,别的字段都删除了。 users.update(newBasicDBObject("_id",300), newBasicDBObject ("cust_Id","6533615")).getN(); //这种写法可以实现只更新id为300的cust_Id值为6533615,而不删除这条记录的别的字//段属性 users.update(newBasicDBObject("_id",300), newBasicDBObject("$set",newBasicDBObject("cust_Id","6533615"))).getN();
3.6java对collection的删除操作 //移除cust_Id为6533615的数据。注意 用remove方法不释放磁盘空间, //mongodb只在collection中做了标志,没有正在删除。 users.remove(newBasicDBObject("cust_Id","6533615")).getN(); //移除id>=1的数据 users.remove(newBasicDBObject("_id",new BasicDBObject("$gte",1))).getN(); //移除整个collection,drop也不释放磁盘空间 users.drop();
mongodb 小计(查询和导出) $in $gt $lt 分类: 数据库开发技术
mongodb 查询集合之内 > db.roothomesCol.find({"ID":{"$in":[48493297,48701795]}}); mongodb 查询大小之间 > db.roothomesCol.find({"ID":{$gt : 48493297, $lt : 48701795}}); mongo IN 关键字,在集合里面索引限定范围 roothomes $ /mongo/mongodb-2.0.2/bin/mongoexport --host 127.0.0.1 --port 30000 --db roothomesDB -c roothomesCol --query '{"ID":{"$in":[48493297,48701795]}}' --fields _id,AB,AC --csv > roothomes.csv mongodb $gt $lt 关键字,在集合里面索引限定范围 roothomes $ /mongo/mongodb-2.0.2/bin/mongoexport --host 127.0.0.1 --port 30000 --db roothomesDB -c roothomesCol --query '{"ID":{$gt : 48420000, $lt : 48430000}}' --fields _id,AB,AC --csv > roothomes.csv
[/code]