一、安装:
下载:
https://www.mongodb.org/
二、启动:
找到安装路径,添加到环境变量,运行
1
| mongod.exe --dbpath "d:/db/"
|
这样就建立好了数据库,登陆数据库,默认没有用户名和密码,所以在公网上可以找到很多没有密码的数据库:
1 2 3
| >mongo.exe MongoDB shell version: 3.0.7 connecting to: test
|
三、操作数据库:
查看数据库:
1 2 3 4 5
| > show dbs; local 0.078GB mao1 0.078GB test 0.078GB yumao 0.078GB
|
选择数据库:
1 2
| > use test; switched to db test
|
显示当前db所有聚集索引的状态
1 2 3 4 5 6 7 8
| > db.getCollectionNames(); [ "ad.set", "admin", "alipay.competition", "alipay.log", "alipay.yubi.log", ......略......
|
聚集集合查询
1、查询所有记录
1 2 3 4
| > db.user.find(); =select* from user; 默认每页显示20条记录,当显示不下的情况下,可以用it迭代命令查询下一页数据。注意:键入it命令不能带“;” 但是你可以设置每页显示数据的大小,用DBQuery.shellBatchSize= 50;这样每页就显示50条记录了
|
2、查询去掉后的当前聚集集合中的某列的重复数据
1 2 3
| db.userInfo.distinct("name"); 会过滤掉name中的相同数据 相当于:select distict name from userInfo;
|
3、查询age = 22的记录
1 2
| db.userInfo.find({"age": 22}); 相当于: select * from userInfo where age = 22;
|
4、查询age > 22的记录
1 2
| db.userInfo.find({age: {$gt: 22}}); 相当于:select * from userInfo where age >22;
|
5、查询age < 22的记录
1 2
| db.userInfo.find({age: {$lt: 22}}); 相当于:select * from userInfo where age <22;
|
6、查询age >= 25的记录
1 2
| db.userInfo.find({age: {$gte: 25}}); 相当于:select * from userInfo where age >= 25;
|
7、查询age <= 25的记录
1
| db.userInfo.find({age: {$lte: 25}});
|
8、查询age >= 23 并且 age <= 26
1
| db.userInfo.find({age: {$gte: 23, $lte: 26}});
|
9、查询name中包含 mongo的数据
1 2 3
| db.userInfo.find({name: /mongo/});
select * from userInfo where name like ‘%mongo%’;
|
10、查询name中以mongo开头的
1 2
| db.userInfo.find({name: /^mongo/}); select * from userInfo where name like ‘mongo%’;
|
11、查询指定列name、age数据
1 2 3
| db.userInfo.find({}, {name: 1, age: 1}); 相当于:select name, age from userInfo; 当然name也可以用true或false,当用ture的情况下河name:1效果一样,如果用false就是排除name,显示name以外的列信息。
|
12、查询指定列name、age数据, age > 25
1 2
| db.userInfo.find({age: {$gt: 25}}, {name: 1, age: 1}); 相当于:select name, age from userInfo where age >25;
|
13、按照年龄排序
1 2
| 升序:db.userInfo.find().sort({age: 1}); 降序:db.userInfo.find().sort({age: -1});
|
14、查询name = zhangsan, age = 22的数据
1 2
| db.userInfo.find({name: 'zhangsan', age: 22}); 相当于:select * from userInfo where name = ‘zhangsan’ and age = ‘22’;
|
15、查询前5条数据
1 2
| db.userInfo.find().limit(5); 相当于:selecttop 5 * from userInfo;
|
16、查询10条以后的数据
1 2 3 4
| db.userInfo.find().skip(10); 相当于:select * from userInfo where id not in ( selecttop 10 * from userInfo );
|
17、查询在5-10之间的数据
1 2
| db.userInfo.find().limit(10).skip(5); 可用于分页,limit是pageSize,skip是第几页*pageSize
|
18、or与 查询
1 2
| db.userInfo.find({$or: [{age: 22}, {age: 25}]}); 相当于:select * from userInfo where age = 22 or age = 25;
|
19、查询第一条数据
1 2 3
| db.userInfo.findOne(); 相当于:selecttop 1 * from userInfo; db.userInfo.find().limit(1);
|
20、查询某个结果集的记录条数
1 2
| db.userInfo.find({age: {$gte: 25}}).count(); 相当于:select count(*) from userInfo where age >= 20;
|
21、按照某列进行排序
1 2
| db.userInfo.find(}).count(); 相当于:select count from userInfo;
|
删除数据库:
1 2
| > db.dropDatabase(); { "dropped" : "test", "ok" : 1 }
|
将远程数据库备份到本地:
这里要使用:mongodump.exe
1 2 3 4 5 6
| mongodump -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -o 文件存在路径 -------###-------- 如果没有用户谁,可以去掉-u和-p 如果导出本机的数据库,可以去掉-h 如果是默认端口,可以去掉--port 如果想导出所有数据库,可以去掉-d
|
导出数据
1 2
| >mongoexport -d db -c user -o user.dat -d代表指明从哪个数据库中导出数据;-c代表从哪个集合中导出数据;-o指明导出的数据输出到哪个文件中。
|
导出成功后,打开user.dat文件,导出的数据如下所示:
1 2
| { "_id" : { "$oid" : "4eed9f9ca939118694cf05e4" }, "name" : "ming", "age" : 2 } { "_id" : { "$oid" : "4ef1f3cf3bd18218e6bdfa31" }, "name" : "lisi", "age" : "20" }
|
导出为CVS文件
如果要导出集合中指定字段的数据存到CVS文件中,可以使用如下命令:
1 2 3
| $ mongoexport -d sports -c user -f phone --type=csv -o d:/user.csv connected to: localhost exported 102563 records
|
导出的user.cvs文件的内容如下:
1 2
| { "_id" : { "$oid" : "4eed9f9ca939118694cf05e4" }, "name" : "ming" } { "_id" : { "$oid" : "4ef1f3cf3bd18218e6bdfa31" }, "name" : "lisi" }
|
导入数据库:
常用命令格式
1 2
| mongorestore -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 --drop 文件存在路径 --drop的意思是,先删除所有的记录,然后恢复
|
恢复所有数据库到mongodb中
1 2
| >mongorestore "d:/db/" #这里的路径是所有库的备份路径
|
还原指定的数据库
1 2
| >mongorestore -d admin "d:/db/admin"
|