注:官方下载地址:http://www.mongodb.org/downloads
第一步:下载安装包:如果是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的意思是:当记录不存在时插入,而如果记录存在时则忽略,继续插入。