MongoDB简单应用



注:官方下载地址:http://www.mongodb.org/downloads

中文社区:http://www.mongoing.com/



第一步:下载安装包:如果是win系统,注意是64位还是32位版本的,请选择正确的版本。
第二步:新建目录“D:\mongodb”,解压下载到的安装包,找到bin目录下面全部.exe文件,拷贝到刚创建的目录下。

第三步:在“D:\mongodb”目录下新建“data”文件夹,它将会作为数据存放的根文件夹。(启动mongodb服务之前需 要必须创建数据库文件的存放文件夹,否则命令不会自动创建,而且不能启动成功。


第四步:打开cmd(windows键+r输入cmd)命令行,进入D:\mongodb\bin目录(如图先输入d:进入d盘然后输入 cd d:\mongodb\bin),

输入如下的命令启动mongodb服务:

D:/mongodb/bin>mongod --dbpath D:\mongodb\data


第五步:mongodb默认连接端口27017,如果出现如图的情况,可以打开http://localhost:27017查看


第六步:在d:\mongodb下新建文件夹log(存放日志文件)并且新建文件mongodb.log

MongoDB设置成Windows服务,这个操作就是为了方便,每次开机MongoDB就自动启动了。

mongod --logpath d:\mongodb\log\mongodb.log --install --serviceName MongoDB


 这里MongoDB.log就是开始建立的日志文件,--serviceName "MongoDB" 服务名为MongoDB


>NET START MongoDB   (开启服务)

>NET stop MongoDB   (关闭服务)


mongodb\bin>mongod --remove --serviceName MongoDB      (删除,注意不是--install了)



mongodb数据结构
          每一个mongodb包含多个库(show dbs查看),这些库都是在第一次使用时自动创建的。可以通过(use dbname)指定库,每个库包含多个集合可以使用命令show collections显示所有集合,所以我们在操作文档的时候
要手动指定集合(db.user.find),每个集合包含多份文档,也就是json对象




1、查看所有库
-->show dbs
显示当前数据库中的所有数据库名称
--不用手动创建数据库,直接使用即可,数据库引擎会帮我们创建他们


2、使用mydb
-->use mydb
mongodb会帮我们自动创建他们


3、新增记录
-->db.user.save({name:'rad',age:23})


4、查看集合当中所有文档
-->db.user.find()
5、删除记录
-->db.user.remove()  删除所有
-->db.user.remove({name:'rad'}) 删除指定条件的
6、保存多条记录
-->for(var i=1;i<=20;i++)db.user.save({x:8,y:i})
7、迭代器
-->it
find()只显示前20条记录。余下的使用迭代器查看
8、根据条件查询
查询出Y大于10的所有记录
-->db.user.find({y:{$gt:10}})
9、查询指定列
-->db.user.find({x:8},{y:true})  //查询出x=8的所有记录y列
-->db.user.find({},{y:true}) //查询出所有的记录Y列


10、只查第一列
-->db.user.findOne();
11、限制最大记录从而提高性能
-->db.user.find().limit(4) //只显示前四条
12、修改记录
-->db.user.update({x:4},{x:4,y:1})//将第一条x=4的记录修改为后面的值
-->db.user.update({'x':{$gt:11}},{$set:{'y':23}})  //将x>11的记录,第一条y改为23
-->db.user.update({'x':{$gt:11}},{$set:{'y':23}},{multi:true}) //如有多条记录所有都更改


13、db.user.drop()
 --删除user集合,包括user集合中所有文档。


 14、排序
可以同时多个字段的排列,比如:  1是升序,-1是降序
db.SortTest.find().sort( { age: -1 , name: 1} ); 


15、返回结果集的条数。
db.test.count()
在加入skip()和limit()这两个操作时,要获得实际返回的结果数,需要一个参数true,
否则返回的是符合查询条件的结果总数


db.test.find().skip(5).limit(5).count(true)




16、limit()控制返回结果数量,如果参数是0,则当作没有约束,limit()将不起作用。
skip()控制返回结果跳过多少数量,如果参数是0,则当作没有约束,skip()将不起作用,或者说跳过了0条。
例如:
db.test.find().skip(5).limit(5)
结果就是取第6条到第10条数据。




java 应用:

1、Mongo m = new Mongo(); //创建MongoDB数据库连接对象
2、DB db = m.getDB("test"); //获取名为test的数据库
3、DBCollection user = db.getCollection("user");//获取集合




查询:DBCursor cur = user.find();
while(cur.hasNext()){
....
}


查询条件:
1、$gte >= 大于等于 (大于:$gt)
user.find(new BasicDBObject("age",new BasicDBObject("$gte",22)));
2、$lte <=小于等于 (小于:$lt)
user.find(new BasicDBObject("age",new BasicDBObject("$lte",22)));
3、$ne != 不等于
user.find(new BasicDBObject("age",new BasicDBObject("$ne",22)));
4、$nin  not in 
users.find(new BasicDBObject("age", new BasicDBObject(QueryOperators.IN, new int[] { 25, 26, 27 })))
5、in 
users.find(new BasicDBObject("age", new BasicDBObject(QueryOperators.IN, new int[] { 25, 26, 27 }))
6、$exists 存在
user.find(new BasicDBObject("age",new BasicDBObject(QueryOperators.EXISTS,TRUE)))
7、只查询age属性

user.find(null, new BasicDBObject("age", true))

8、分页


//取id大于等于1的记录,并且只取10条
DBCursor cur = users.find(new BasicDBObject("_id",new BasicDBObject("$get",1))).limit(10);
while(cur.hasNext()){
System.out.println(cur.next());
}


//取id大于等于1的记录,并按id进行降序,-1标识降序,1标识升序
DBCursor cur2 = users.find(new BasicDBObject("_id",new BasicDBObject("$get",1))).sort(new BasicDBObject("_id",-1));
while(cur2.hasNext()){
System.out.println(cur2.next());
}

//查询id大于等于1的记录,并跳过前10条记录显示,相当于id>10
DBCursor cur3 = users.find(new BasicDBObject("_id",new BasicDBObject("$get",1))).skip(10);
while(cur3.hasNext()){
System.out.println(cur2.next());
}

//查询id大于等于1的记录,并且跳过前10条记录,只显示10条记录,相当于分页功能
DBCursor cur4 = users.find(new BasicDBObject("_id",new BasicDBObject("$get",1))).skip(10).limit(10);
while(cur4.hasNext()){
System.out.println(cur2.next());
}


查询删除:
user.findAndRemove(new BasicDBObject("age",23))
查询修改:
//查询age=26的数据,并且修改name的值为Abc    
user.findAndModify(new BasicDBObject("age",26),new BasicDBObject("name","aaa"))
users.findAndModify(
new BasicDBObject("age", 28), //查询age=28的数据        
new BasicDBObject("name", true), //查询name属性         
new BasicDBObject("age", true), //按照age排序         
false, //是否删除,true表示删除         
new BasicDBObject("name", "Abc"), //修改的值,将name修改成Abc         
true,          
true)

返回一个文档:
user.findOne();
users.findOne(new BasicDBObject("age", 26)); 
users.findOne(new BasicDBObject("age", 26), new BasicDBObject("name", true));
数量:users.count();
添加:(1)DBObject u = new DBObject();
        u.put("name","lili");
        u.put("age",21);
u.put("",""); //随意扩展字段
        user.save(u);
     (2)user.insert(new BasicDBObjectBuilder()
.add("","")
.add("","")
.get());
users.update(new BasicDBObject("_id",new ObjectId("544606af5ead21520db44ab9")), 
new BasicDBObject().append("", "").append("", ""))


      (3)添加多条
DBObject u = new DBObject();
DBObject u2 = new DBObject();
user.insert(u,u2,.....);
(4)添加list集合
List<DBObject> list = new ArrayList<DBObject>();
list.add(u);
list.add(u2);
user.insert(list);
删除:
(1)删除全部
user.remove();
(2)删除指定条件
user.remove(new BasicDBObject("_id",new ObjectId("ssssss")));
user.remove(new BasicDBObject("age",new BasicDBObject("$gte",23)));

修改:
(1)
Map map = new HashMap();
map.put("name", "lili");
map.put("age", 22);
user.update(new BasicDBObject("_id",new ObjectId("ss")),  //条件
new BasicDBObject(map),   //修改内容
true,    //true数据库不存在则添加
false   //false只修改第一条,true多条不修改
);
(2)
user.update(new BasicDBObject("name","lili"),)

(3)整个对象重新全部修改
BasicDBObject newDocument =new BasicDBObject();
//多条也是只修改第一条
newDocument.put("companyID", "BJ_00ww");
newDocument.put("type", "shared host");
newDocument.put("clients", 222);
users.update(new BasicDBObject().append("companyID", "BJ_00ww"), newDocument);




引入了MongoTemplate模版类


 另外请注意其中的save和insert的区别。它们的区别为:
  1)save意思是,当记录不存在时插入,或者是当记录已存在是更新,实际上就是saveorupdate的意思。
  2) insert的意思是:当记录不存在时插入,而如果记录存在时则忽略,继续插入。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值