上一节我们讲解了对于mongodb的一些认识和概念,那么接下来就要切实步入mongodb的学习中了。
mongodb不像关系型数据库有很强大的GUI客户端,虽然mongodb也有,但功能和稳定性实在不敢恭维,所以操作mongodb我们大部分 都是用类似cmd命令的方式(mongodb称为shell操作)来完成,因此学好mongodb shell操作是非常重要的基础。
一、准备工作
1、 下载mongoDB
下载地址:http://www.mongodb.org/downloads
选择合适你的版本
相关文档:http://www.mongodb.org/display/DOCS/Tutorial
2、 安装mongoDB
A、 不解压模式:
将下载下来的mongoDB-xxx.zip打开,找到bin目录,运行mongod.exe就可以启动服务,默认端口27017,db保存的路径 是系统C硬盘目录的根目录的/data/db目录。也就是说,如果你的mongoDB-xxx.zip在E盘,那么你需要在C盘下建立data/db目 录。mongoDB不会帮你建立这个目录的。
然后运行mongo即可连接到test数据库,你就可以进行数据操作。运行help显示帮助命令行。
B、 解压模式
将下载下来的mongoDB-xxx.zip解压到任意目录,找到bin目录,运行mongod.exe就可以启动mongoDB,默认端口 27017,db保存的路径是当前zip所在硬盘目录的根目录的/data/db目录。也就是说,如果你的mongoDB-xxx.zip在E盘,那么你 需要在E盘下建立data/db目录。mongoDB不会帮你建立这个目录的。
然后运行mongo即可连接到test数据库,你就可以进行数据操作。运行help显示帮助命令行。
3、 简单测试
- > 2+4
- 6
- > db
- test
- > //第一次插入数据会创建数据库
- Fri May 20 16:47:39 malformed UTF-8 character sequence at offset 27
- error2:(shellhelp1) exec failed: malformed UTF-8 character sequence at offset 27
- > db.foo.insert({id: 2011, userName: 'hoojo', age: 24, email: "hoojo_@126.com"});
- > db.foo.find();
- { "_id" : ObjectId("4dd62b0352a70cbe79e04f81"), "id" : 2011, "userName" : "hoojo",
- "age" : 24, "email" : "hoojo_@126.com" }
- >
上面完成了简单运算,显示当前使用的数据库,以及添加数据、查询数据操作
二、DB shell数据操作
shell命令操作语法和JavaScript很类似,其实控制台底层的查询语句都是用JavaScript脚本完成操作的。
Ø 数据库
1、Help查看命令提示
- > help
- > db.help();
- > db.yourColl.help();
- > db.youColl.find().help();
- > rs.help();
2、切换/创建数据库
- > use yourDB;
当创建一个集合(table)的时候会自动创建当前数据库
3、查询所有数据库
- > show dbs;
4、删除当前使用数据库
- > db.dropDatabase();
5、从指定主机上克隆数据库
- > db.cloneDatabase(“127.0.0.1”);
将指定机器上的数据库的数据克隆到当前数据库
6、从指定的机器上复制指定数据库数据到某个数据库
- > db.copyDatabase("mydb", "temp", "127.0.0.1");
将本机的mydb的数据复制到temp数据库中
7、修复当前数据库
- > db.repairDatabase();
8、查看当前使用的数据库
- > db.getName();
- > db;
db和getName方法是一样的效果,都可以查询当前使用的数据库
9、显示当前db状态
- > db.stats();
10、当前db版本
- > db.version();
11、查看当前db的链接机器地址
- > db.getMongo();
Ø Collection聚集集合
1、创建一个聚集集合(table)
- > db.createCollection(“collName”, {size: 20, capped: 5, max: 100});
2、得到指定名称的聚集集合(table)
- > db.getCollection("account");
3、得到当前db的所有聚集集合
- > db.getCollectionNames();
4、显示当前db所有聚集索引的状态
- > db.printCollectionStats();
Ø 用户相关
1、添加一个用户
- > db.addUser("name");
- > db.addUser("userName", "pwd123", true);
添加用户、设置密码、是否只读
2、数据库认证、安全模式
- > db.auth("userName", "123123");
3、显示当前所有用户
- > show users;
4、删除用户
- > db.removeUser("userName");
Ø 其他
1、查询之前的错误信息
- > db.getPrevError();
2、清除错误记录
- > db.resetError();
三、Collection聚集集合操作
Ø 查看聚集集合基本信息
1、查看帮助
- > db.yourColl.help();
2、查询当前集合的数据条数
- > db.yourColl.count();
3、查看数据空间大小
- > db.userInfo.dataSize();
4、得到当前聚集集合所在的db
- > db.userInfo.getDB();
5、得到当前聚集的状态
> db.userInfo.stats();
6、得到聚集集合总大小
> db.userInfo.totalSize();
7、聚集集合储存空间大小
> db.userInfo.storageSize();
8、Shard版本信息
> db.userInfo.getShardVersion()
9、聚集集合重命名
> db.userInfo.renameCollection("users");
将userInfo重命名为users
10、删除当前聚集集合
> db.userInfo.drop();
Ø 聚集集合查询
1、查询所有记录
> db.userInfo.find();
相当于:select * from userInfo;
默认每页显示20条记录,当显示不下的情况下,可以用it迭代命令查询下一页数据。注意:键入it命令不能带“;”
但是你可以设置每页显示数据的大小,用DBQuery.shellBatchSize = 50;这样每页就显示50条记录了。
2、查询去掉后的当前聚集集合中的某列的重复数据
> db.userInfo.distinct("name");
会过滤掉name中的相同数据
相当于:select distict name from userInfo;
3、查询age = 22的记录
> db.userInfo.find({"age": 22});
相当于:select * from userInfo where age = 22;
4、查询age > 22的记录
> db.userInfo.find({age: {$gt: 22}});
相当于:select * from userInfo where age > 22;
5、查询age < 22的记录
> db.userInfo.find({age: {$lt: 22}});
相当于:select * from userInfo where age < 22;
6、查询age >= 25的记录
> db.userInfo.find({age: {$gte: 25}});
相当于:select * from userInfo where age >= 25;
7、查询age <= 25的记录
> db.userInfo.find({age: {$lte: 25}});
8、查询age >= 23 并且 age <= 26
> db.userInfo.find({age: {$gte: 23, $lte: 26}});
9、查询name中包含 mongo的数据
> db.userInfo.find({name: /mongo/});
相当于:select * from userInfo where name like ‘%mongo%’;
10、查询name中以mongo开头的
> db.userInfo.find({name: /^mongo/});
select * from userInfo where name like ‘mongo%’;
11、查询指定列name、age数据
> 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
> db.userInfo.find({age: {$gt: 25}}, {name: 1, age: 1});
相当于:select name, age from userInfo where age > 25;
13、按照年龄排序
升序:
> db.userInfo.find().sort({age: 1});
降序:
> db.userInfo.find().sort({age: -1});
14、查询name = zhangsan, age = 22的数据
> db.userInfo.find({name: 'zhangsan', age: 22});
相当于:select * from userInfo where name = ‘zhangsan’ and age = ‘22’;
15、查询前5条数据
> db.userInfo.find().limit(5);
相当于:select top 5 * from userInfo;
16、查询10条以后的数据
> db.userInfo.find().skip(10);
相当于:select * from userInfo where id not in ( select top 10 * from userInfo );
17、查询在5-10之间的数据
> db.userInfo.find().limit(10).skip(5);
可用于分页,limit是pageSize,skip是第几页*pageSize
18、or与 查询
> db.userInfo.find({$or: [{age: 22}, {age: 25}]});
相当于:select * from userInfo where age = 22 or age = 25;
19、查询第一条数据
> db.userInfo.findOne();
相当于:select top 1 * from userInfo;
> db.userInfo.find().limit(1);
20、查询某个结果集的记录条数
> db.userInfo.find({age: {$gte: 25}}).count();
相当于:select count(*) from userInfo where age >= 20;
21、按照某列进行排序
> db.userInfo.find({sex: {$exists: true}}).count();
相当于:select count(sex) from userInfo;
Ø 索引
1、创建索引
> db.userInfo.ensureIndex({name: 1}); > db.userInfo.ensureIndex({name: 1, ts: -1});
2、查询当前聚集集合所有索引
> db.userInfo.getIndexes();
3、查看总索引记录大小
> db.userInfo.totalIndexSize();
4、读取当前集合的所有index信息
> db.users.reIndex();
5、删除指定索引
> db.users.dropIndex("name_1");
6、删除所有索引索引
> db.users.dropIndexes();
Ø 修改、添加、删除集合数据
1、添加
> db.users.save({name: ‘zhangsan’, age: 25, sex: true});
添加的数据的数据列,没有固定,根据添加的数据为准
2、修改
> db.users.update({age: 25}, {$set: {name: 'changeName'}}, false, true);
相当于:update users set name = ‘changeName’ where age = 25;
> db.users.update({name: 'Lisi'}, {$inc: {age: 50}}, false, true);
相当于:update users set age = age + 50 where name = ‘Lisi’;
> db.users.update({name: 'Lisi'}, {$inc: {age: 50}, $set: {name: 'hoho'}}, false, true);
相当于:update users set age = age + 50, name = ‘hoho’ where name = ‘Lisi’;
3、删除
> db.users.remove({age: 132});
4、查询修改删除
- > db.users.findAndModify({
- ... query: {age: {$gte: 25}},
- ... sort: {age: -1},
- ... update: {$set: {name: 'a2'}, $inc: {age: 2}},
- ... remove: true
- ... });
- > db.runCommand({ findandmodify : "users",
- ... query: {age: {$gte: 25}},
- ... sort: {age: -1},
- ... update: {$set: {name: 'a2'}, $inc: {age: 2}},
- ... remove: true
- ... });
update 或 remove 其中一个是必须的参数; 其他参数可选。
参数 |
详解 |
默认值 |
query |
查询过滤条件 |
{} |
sort |
如果多个文档符合查询过滤条件,将以该参数指定的排列方式选择出排在首位的对象,该对象将被操作 |
{} |
remove |
若为true,被选中对象将在返回前被删除 |
N/A |
update |
一个 修改器对象 |
N/A |
new |
若为true,将返回修改后的对象而不是原始对象。在删除操作中,该参数被忽略。 |
false |
fields |
参见Retrieving a Subset of Fields (1.5.0+) |
All fields |
upsert |
创建新对象若查询结果为空。 示例 (1.5.4+) |
false |
1、简单Hello World
- > print("Hello World!");
这种写法调用了print函数,和直接写入"Hello World!"的效果是一样的;
2、将一个对象转换成json
- > tojson(new Object());
- > tojson(new Object('a'));
3、循环添加数据
- > for (var i = 0; i < 30; i++) {
- ... db.users.save({name: "u_" + i, age: 22 + i, sex: i % 2});
- ... };
这样就循环添加了30条数据,同样也可以省略括号的写法
- > for (var i = 0; i < 30; i++) db.users.save({name: "u_" + i, age: 22 + i, sex: i % 2});
也是可以的,当你用db.users.find()查询的时候,显示多条数据而无法一页显示的情况下,可以用it查看下一页的信息;
4、find 游标查询
- >var cursor = db.users.find();
- > while (cursor.hasNext()) {
- ... printjson(cursor.next());
- ... }
这样就查询所有的users信息,同样可以这样写
- >var cursor = db.users.find();
- >while (cursor.hasNext()) { printjson(cursor.next); }
同样可以省略{}号
5、forEach迭代循环
- >db.users.find().forEach(printjson);
forEach中必须传递一个函数来处理每条迭代的数据信息
6、将find游标当数组处理
- > var cursor = db.users.find();
- > cursor[4];
取得下标索引为4的那条数据
既然可以当做数组处理,那么就可以获得它的长度:cursor.length();或者cursor.count();
那样我们也可以用循环显示数据
- > for (var i = 0, len = c.length(); i < len; i++) printjson(c[i]);
7、将find游标转换成数组
- > var arr = db.users.find().toArray();
- > printjson(arr[2]);
用toArray方法将其转换为数组
8、定制我们自己的查询结果
只显示age <= 28的并且只显示age这列数据
- > db.users.find({age: {$lte: 28}}, {age: 1}).forEach(printjson);
- > db.users.find({age: {$lte: 28}}, {age: true}).forEach(printjson);
排除age的列
- > db.users.find({age: {$lte: 28}}, {age: false}).forEach(printjson);
9、forEach传递函数显示信息
- > db.things.find({x:4}).forEach(function(x) {print(tojson(x));});
上面介绍过forEach需要传递一个函数,函数会接受一个参数,就是当前循环的对象,然后在函数体重处理传入的参数信息。
那么关于mongodb的shell操作的讲解就先到这了,基本涵盖了mongodb最为常用的操作方法,那么下一节我们会讲述用java如何驱动mongodb,即所谓的CRUD。
相关推荐
MongoDB数据库常用操作命令4.pdf 学习资料 复习资料 教学资源
MongoDB数据库常用操作命令5.pdf 学习资料 复习资料 教学资源
MongoDB数据库常用操作命令7.pdf 学习资料 复习资料 教学资源
MongoDB数据库常用操作命令8.pdf 学习资料 复习资料 教学资源
MongoDB数据库常用操作命令11.pdf 学习资料 复习资料 教学资源
MongoDB数据库常用操作命令3.pdf 学习资料 复习资料 教学资源
MongoDB数据库常用操作命令1.pdf 学习资料 复习资料 教学资源
本文将详细介绍MongoDB数据库 数据库 数据库,顾名思义,是数据存储的仓库,主要功能有两个 1、有组织地存放数据 与在磁盘上自己存放文件不同,数据库替用户组织了数据的存储形式,用户只需要按照数据库提供的接口将...
mongodb 操作命令(全) 包括: 数据库相关的操作 集合相关操作 用户相关操作 。。。。。
目录 1.1基础入门 1.1.1应用场景 1.1.2环境搭建 1.1.3MySQL和MongoDB ... Mongodb是一个内存数据库,数据都存放再内存中 非关系型数据库是一种文档型的数据库,即可以存放xml、json、bson类型的数据,数据结
主要介绍了Mongodb数据库的备份与恢复操作实例,本文讲解使用命令在控制台执行实现Mongodb的备份与恢复操作,需要的朋友可以参考下
Nosql非关系型数据库
一、MongoDB 数据库常用操作命令 1、Help查看命令提示 help db.help(); db.yourColl.help(); 2、切换/创建数据库 use raykaeso; 当创建一个集合(table)的时候会自动创建当前数据库 3、查询所有数据库 show dbs; 4...
1.简介 MongoDB是一个基于分布式文件存储的文档数据库,可以说是非关系型(NoSQL,Not Only SQL)数据库中比较像关系型...MongoDB数据库可以到网站https://www.mongodb.org/downloads下载,安装之后打开命令提示符
Nosql非关系型数据库
包含对数据库、集合、文档的常用操作。
(2)熟练使用4种数据库操作常用的 Shell命令。 (3)熟悉4种数据库操作常用的Java API。 A.4.2实验平台 (1)操作系统:Linux(建议Ubuntu 16.04)。(2)Hadoop版本:2.7.1。 (3)MySQL版本:5.7.15。(4)HBase版本:1.1.2。...
Python使用pymongo操作MongoDB数据库,首先需要安装pymongo模块,如下示例是通过pymongo连接MongoDB数据库,带用户名和密码: from pymongo import MongoClient import datetime client = MongoClient('mongodb://...
本文将详细介绍MongoDB数据库关于文档的增删改查 如果数据库中不存在集合,则MongoDB将创建此集合,然后将文档插入到该集合中 要在单个查询中插入多个文档,可以在insert()命令中传递文档数组 可以使用js语法,...
mongodb基本操作数据库命令