Mongodb如:创建 “myTest”的数据库,先运行usemyTest命令,这样就可以创建一个名叫“myTest”的数据库。
一、数据库常用命令
1、Help查看命令提示
help
();
();
().help();
();
2、切换/创建数据库
useyourDB; 当创建一个集合(table)的时候会自动创建当前数据库
3、查询所有数据库
showdbs;
4、删除当前使用数据库
();
5、从指定主机上克隆数据库
(“127.0.0.1”); 将指定机器上的数据库的数据克隆到当前数据库
6、从指定的机器上复制指定数据库数据到某个数据库
("mydb","temp", "127.0.0.1");将本机的mydb的数据复制到temp数据库中
7、修复当前数据库
();
8、查看当前使用的数据库
();
db; db和getName方法是一样的效果,都可以查询当前使用的数据库
9、显示当前db状态
();
10、当前db版本
();
11、查看当前db的链接机器地址
();
二、Collection聚集集合
1、创建一个聚集集合(table)
(“collName”, {size: 20,capped: 5, max: 100});//创建成功会显示{“ok”:1}
//判断集合是否为定容量();
2、得到指定名称的聚集集合(table)
("account");
3、得到当前db的所有聚集集合
();
4、显示当前db所有聚集索引的状态
();
三、用户相关
1、添加一个用户
("name");
("userName","pwd123", true); 添加用户、设置密码、是否只读
2、数据库认证、安全模式
("userName","123123");
3、显示当前所有用户
show users;
4、删除用户
("userName");
四、聚集集合查询
1、查询所有记录
();
相当于:select* from userInfo;
默认每页显示20条记录,当显示不下的情况下,可以用it迭代命令查询下一页数据。注意:键入it命令不能带“;”
但是你可以设置每页显示数据的大小,用= 50;这样每页就显示50条记录了。
2、查询去掉后的当前聚集集合中的某列的重复数据
("name");
会过滤掉name中的相同数据
相当于:select distict name from userInfo;
3、查询age = 22的记录
({"age":22});
相当于: select * from userInfo where age = 22;
4、查询age > 22的记录
({age:{$gt: 22}});
相当于:select * from userInfo where age >22;
5、查询age < 22的记录
({age:{$lt: 22}});
相当于:select * from userInfo where age <22;
6、查询age >= 25的记录
({age:{$gte: 25}});
相当于:select * from userInfo where age >= 25;
7、查询age <= 25的记录
({age:{$lte: 25}});
8、查询age >= 23 并且 age <=26
({age:{$gte: 23, $lte: 26}});
9、查询name中包含 mongo的数据
({name:/mongo/});
//相当于%%
[code]select* from userInfo where name like ‘%mongo%';
10、查询name中以mongo开头的
({name:/^mongo/});
select * from userInfo where name like‘mongo%';
11、查询指定列name、age数据
({},{name: 1, age: 1});
相当于:select name, age from userInfo;
当然name也可以用true或false,当用ture的情况下河name:1效果一样,如果用false就是排除name,显示name以外的列信息。
12、查询指定列name、age数据, age >25
({age:{$gt: 25}}, {name: 1, age: 1});
相当于:select name, age from userInfo where age >25;
13、按照年龄排序
升序:().sort({age:1});
降序:().sort({age:-1});
14、查询name = zhangsan,age = 22的数据
({name:'zhangsan', age: 22});
相当于:select * from userInfo where name = ‘zhangsan' and age = ‘22';
15、查询前5条数据
().limit(5);
相当于:selecttop 5 * from userInfo;
16、查询10条以后的数据
().skip(10);
相当于:select * from userInfo where id not in (
selecttop 10 * from userInfo);
17、查询在5-10之间的数据
().limit(10).skip(5);
可用于分页,limit是pageSize,skip是第几页*pageSize
18、or与 查询
({$or:[{age: 22}, {age: 25}]});
相当于:select * from userInfo where age = 22 or age = 25;
19、查询第一条数据
();
相当于:selecttop 1 * from userInfo;
().limit(1);
20、查询某个结果集的记录条数
({age:{$gte: 25}}).count();
相当于:select count(*) from userInfo where age >= 20;
21、按照某列进行排序
({sex:{$exists: true}}).count();
相当于:select count(sex) from userInfo;
五、索引
1、创建索引
({name:1});
({name:1, ts: -1});
2、查询当前聚集集合所有索引
();
3、查看总索引记录大小
();
4、读取当前集合的所有index信息
();
5、删除指定索引
("name_1");
6、删除所有索引索引
();
六、修改、添加、删除集合数据
1、添加:({name:“zhao” }); //单引号也可以
({name: ‘zhangsan', age: 25,sex: true});
添加的数据的数据列,没有固定,根据添加的数据为准
2、修改
({age:25}, {$set: {name: 'changeName'}}, false, true);
相当于:update users set name = ‘changeName' whereage = 25;
({name:'Lisi'}, {$inc: {age: 50}}, false, true);
相当于:update users set age = age + 50 where name = ‘Lisi';
({name:'Lisi'}, {$inc: {age: 50}, $set: {name: 'hoho'}}, false, true);
相当于:update users set age = age + 50, name = ‘hoho' wherename = ‘Lisi';
3、删除
({age:132});
4、查询修改删除
({
query: {age: {$gte: 25}},
sort: {age: -1},
update: {$set: {name: 'a2'}, $inc: {age: 2}},
remove: true
});
({ 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 Subsetof Fields (1.5.0+)
Allfields
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++) {
... ({name: "u_" +i, age: 22 + i, sex: i % 2});
... };
这样就循环添加了30条数据,同样也可以省略括号的写法
代码如下:
> for (var i = 0; i < 30; i++)({name: "u_" + i, age: 22 + i, sex: i % 2});
也是可以的,当你用()查询的时候,显示多条数据而无法一页显示的情况下,可以用it查看下一页的信息;
4、find 游标查询
>var cursor = ();
> while (()) {
printjson(());
}
这样就查询所有的users信息,同样可以这样写
var cursor = ();
while (()) {printjson(); }
同样可以省略{}号
5、forEach迭代循环
().forEach(printjson);
forEach中必须传递一个函数来处理每条迭代的数据信息
6、将find游标当数组处理
var cursor = ();
cursor[4];
取得下标索引为4的那条数据
既然可以当做数组处理,那么就可以获得它的长度:();或者();
那样我们也可以用循环显示数据
for (var i = 0, len = (); i <len; i++) printjson(c[i]);
7、将find游标转换成数组
> var arr = ().toArray();
> printjson(arr[2]);
用toArray方法将其转换为数组
8、定制我们自己的查询结果
只显示age <= 28的并且只显示age这列数据
({age: {$lte: 28}}, {age: 1}).forEach(printjson);
({age: {$lte: 28}}, {age:true}).forEach(printjson);
排除age的列
({age: {$lte: 28}}, {age:false}).forEach(printjson);
9、forEach传递函数显示信息
({x:4}).forEach(function(x){print(tojson(x));});
八、其他
1、查询之前的错误信息
();
2、清除错误记录
();
查看聚集集合基本信息
1、查看帮助 ();
2、查询当前集合的数据条数 ();
3、查看数据空间大小();
4、得到当前聚集集合所在的();
5、得到当前聚集的状态();
6、得到聚集集合总大小();
7、聚集集合储存空间大小();
8、Shard版本信息 ()
9、聚集集合重命名("users"); 将userInfo重命名为users
10、删除当前聚集集合();
show dbs:显示数据库列表
show collections:显示当前数据库中的集合(类似关系数据库中的表)
show users:显示用户
use <db name>:切换当前数据库,这和MS-SQL里面的意思一样
():显示数据库操作命令,里面有很多的命令
():显示集合操作命令,同样有很多的命令,foo指的是当前数据库下,一个叫foo的集合,并非真正意义上的命令
():对于当前数据库中的foo集合进行数据查找(由于没有条件,会列出所有数据)
( { a : 1 } ):对于当前数据库中的foo集合进行查找,条件是数据中有一个属性叫a,且a的值为1
修改器名称 |
语法 |
案例 |
||
$set |
{$set:{field: value}} |
{$set:{name:”uspcat”}} |
||
它用来指定一个键值对,如果存在键就进行修改不存在则进行添加. | ||||
$inc |
{ $inc : { field : value } } |
{ $inc : { "count" : 1 } } |
||
只是使用与数字类型,他可以为指定的键对应的数字类型的数值进行加减操作. | ||||
$unset |
{ $unset : { field : 1} } |
{ $unset : { “name":1 } |
||
他的用法很简单,就是删除指定的键 | ||||
$push |
{ $push : { field : value } } |
{ $push : { books:”JS”} |
||
1.如果指定的键是数组增追加新的数值 2.如果指定的键不是数组则中断当前操作Cannot apply $push/$pushAll modifier to non-array 3.如果不存在指定的键则创建数组类型的键值对 | ||||
$pushAll |
{ $pushAll : { field : array } } |
{ $push : { books:[“EXTJS”,”JS”]} |
||
用法和$push相似他可以体谅添加数组数据 | ||||
$addToSet |
{ $addToSet: { field : value } } |
{ $addToSet: { books:”JS”} |
||
目标数组存在此项则不操作,不存在此项则加进去 | ||||
$pop |
{$pop:{field: value}} |
{$pop:{name:1}} {$pop:{name:-1}} |
||
从指定数组删除一个值1删除最后一个数值,-1删除第一个数值 | ||||
$pull |
{ $pull: { field : value } } |
{ $pull : { “book" : “JS” } } |
||
删除一个被指定的数值 | ||||
$pullAll |
{ $pullAll: { field : array} } |
{ $pullAll: { “name":[“JS”,”JAVA”] } |
||
一次性删除多个指定的数值 | ||||
$ |
{ $push : { field : value } } |
{ $push : { books:”JS”} |
||
1.数组定位器,如果数组有多个数值我们只想对其中一部分进行操作我们就要用到定位器($) 例子:例如有文档{name:”YFC”,age:27,books:[{type:’JS’,name:”EXTJS4”},{type:”JS”,name:”JQUERY”},{type:”DB”,name:”MONGODB”}]} 我们要把type等于JS的文档增加一个相同的作者author是USPCAT 办法:({"":"JS"},{$set:{"books.$.author":"USPCAT"}}) | ||||
*切记修改器是放到最外面,后面要学的查询器是放到内层的
服务器
mongod --dbpath D:\Mongodbdata |
客户端
mongo 127.0.0.1:27017/test |
1.插入文档
db.[documentName].insert({})
2.批量插入文档
shell 这样执行是错误的 db.[documentName].insert([{},{},{},……..])
shell 不支持批量插入想完成批量插入可以用mongo的应用驱动或是shell的for循环
操作
save操作和insert操作区别在于当遇到_id相同的情况下save完成保存操作insert则会报错
1.删除列表中所有数据
db.[documentName].remove()
集合的本身和索引不会别删除
2.根据条件删除
db.[documentName].remove({})
删除集合text中name等于uspcat的纪录
({name:”uspcat”})
3.小技巧
如果你想清楚一个数据量十分庞大的集合直接删除该集合并且重新建立索引的办法比直接用remove的效率和高很多
1.强硬的文档替换式更新操作
db.[documentName].update({查询器},{修改器})
强硬的更新会用新的文档代替老的文档
2.主键冲突的时候会报错并且停止更新操作
因为是强硬替换当替换的文档和已有文档ID冲突的时候则系统会报错
操作
目的:查询器查出来数据就执行更新操作,查不出来就替换操作做法:db.[documentName].update({查询器},{修改器},true)
4.批量更新操作
默认情况当查询器查询出多条数据的时候默认就修改第一条数据如何实现批量修改
db.[documentName].update({查询器},{修改器},false, true)
6. $addToSet与$each结合完成批量数组更新
({_id:1000},{$addToSet:{books:{$each:[“JS”,”DB”]}}})
$each会循环后面的数组把每一个数值进行$addToSet操作
7.存在分配与查询效率
当document被创建的时候DB为其分配没存和预留内存当修改操作不超过预留内层的时候则速度非常快反而超过了就要分配新的内存则会消耗时间
6. runCommand函数和findAndModify函数
runCommand可以执行mongoDB中的特殊函数
findAndModify就是特殊函数之一他的用于是返回update或remove后的文档
runCommand({“findAndModify”:”processes”,
query:{查询器},
sort{排序},
new:true
update:{更新器},
remove:true
}).value
ps = ({
"findAndModify":"persons",
"query":{"name":"text"},
"update":{"$set":{"email":"1221"}},
"new":true
}).value
do_something(ps)
1.指定返回的键
db.[documentName].find ({条件},{键指定})
数据准备
var persons = [{ name:"jim", age:25, email:"75431457@", c:89,m:96,e:87, country:"USA", books:["JS","C++","EXTJS","MONGODB"] }, { name:"tom", age:25, email:"214557457@", c:75,m:66,e:97, country:"USA", books:["PHP","JAVA","EXTJS","C++"] }, { name:"lili", age:26, email:"344521457@", c:75,m:63,e:97, country:"USA", books:["JS","JAVA","C#","MONGODB"] }, { name:"zhangsan", age:27, email:"2145567457@", c:89,m:86,e:67, country:"China", books:["JS","JAVA","EXTJS","MONGODB"] }, { name:"lisi", age:26, email:"274521457@", c:53,m:96,e:83, country:"China", books:["JS","C#","PHP","MONGODB"] }, { name:"wangwu", age:27, email:"65621457@", c:45,m:65,e:99, country:"China", books:["JS","JAVA","C++","MONGODB"] }, { name:"zhaoliu", age:27, email:"214521457@", c:99,m:96,e:97, country:"China", books:["JS","JAVA","EXTJS","PHP"] }, { name:"piaoyingjun", age:26, email:"piaoyingjun@", c:39,m:54,e:53, country:"Korea", books:["JS","C#","EXTJS","MONGODB"] }, { name:"lizhenxian", age:27, email:"lizhenxian@", c:35,m:56,e:47, country:"Korea", books:["JS","JAVA","EXTJS","MONGODB"] }, { name:"lixiaoli", age:21, email:"lixiaoli@", c:36,m:86,e:32, country:"Korea", books:["JS","JAVA","PHP","MONGODB"] }, { name:"zhangsuying", age:22, email:"zhangsuying@", c:45,m:63,e:77, country:"Korea", books:["JS","JAVA","C#","MONGODB"] }] for(var i = 0;i<;i++){ (persons[i]) } var persons = ({name:"jim"}) while(()){ obj = (); print() } |
1.1 查询出所有数据的指定键(name ,age,country)
({},{name:1,age:1,country:1,_id:0})
2.查询条件
2.1查询出年龄在25到27岁之间的学生
({age: {$gte:25,$lte:27},{_id:0,age:1})
2.2查询出所有不是韩国籍的学生的数学成绩
({country:{$ne:” Korea”}},{_id:0,m:1})
3.包含或不包含
$in或$nin
2.3查询国籍是中国或美国的学生信息
({country:{$in:[“USA”,“China”]}})
2.4查询国籍不是中国或美国的学生信息
({country:{$nin:[“USA”,“China”]}})
查询
$or
2.4查询语文成绩大于85或者英语大于90的学生信息
({$or:[{c:{$gte:85}},{e:{$gte:90}}]},{_id:0,c:1,e:1})
把中国国籍的学生上增加新的键sex
({country:”China”},{$set:{sex:”m”}})
2.5查询出sex 等于 null的学生
({sex:{$in:[null]}},{country:1})
6.正则查询
2.6查询出名字中存在”li”的学生的信息
({name:/li/i},{_id:0,name:1})
7.$not的使用
$not可以用到任何地方进行取反操作
2.7查询出名字中不存在”li”的学生的信息
({name:{$not:/li/i}},{_id:0,name:1})
$not和$nin的区别是$not可以用在任何地方儿$nin是用到集合上的
8.数组查询$all和index应用
2.8查询喜欢看MONGOD和JS的学生
({books:{$all:[“MONGOBD”,”JS”]}},{books:1,_id:0})
2.9查询第二本书是JAVA的学习信息
({“books.1”:”JAVA”})
9.查询指定长度数组$size它不能与比较查询符一起使用(这是弊端)
2.8查询出喜欢的书籍数量是4本的学生
({books:{$size:4}},{_id:0,books:1})
2.9查询出喜欢的书籍数量大于3本的学生
1.增加字段size
({},{$set:{size:4}},false,true)
2.改变书籍的更新方式,每次增加书籍的时候size增加1
({查询器},{$push:{books:”ORACLE”},$inc:{size:1}})
3.利用$gt查询
({size:{$gt:3}})
2.10利用shell查询出Jim喜欢看的书的数量
var persons =({name:"jim"})
while(()){
obj= ();
print()
} 10.$slice操作符返回文档中指定数组的内部值
2.11查询出Jim书架中第2~4本书
({name:"jim"},{books:{"$slice":[1,3]}})
2.12查询出最后一本书
({name:"jim"},{books:{"$slice":-1},_id:0,name:1})
11.文档查询
为jim添加学习简历文档
var jim = [{ school :"K", score:"A" },{ school :"L", score:"B" },{ school :"J", score:"A+" }] ({name:"jim"},{$set:{school:jim}}) |
2.13查询出在K上过学的学生
1. 这个我们用绝对匹配可以完成,但是有些问题(找找问题?顺序?总要带着score?)
({school:{school:"K",score:"A"}},{_id:0,school:1})
2.为了解决顺序的问题我可以用对象”.”的方式定位
({"":"A","":"K"},{_id:0,school:1})
3.这样也问题看例子:
({"":"A","":”J”},{_id:0,school:1})
同样能查出刚才那条数据,原因是score和school会去其他对象对比
4.正确做法单条条件组查询$elemMatch
({school:{$elemMatch:{school:"K",score:"A"}}})
12.$where
12.查询年龄大于22岁,喜欢看C++书,在K学校上过学的学生信息复杂的查询我们就可以用$where因为他是万能但是我们要尽量避免少使用它因为他会有性能的代价
({"$where":function(){ //得到查询结果的每一条文档 var books = ; //得到文档中的school对象 var school = ; //如果年纪>=22 if( > 22){ var php = null; //遍历书籍 for ( var i = 0; i < ; i++) { if(books[i] == "C++"){ php = books[i]; //如果学校是真 if(school){ for (var j = 0; j < ; j++) { //判断是不是在K上学 if(school[j].school == "K"){ //返回是真 return true; } } break; } } } } }})
|
返回指定的数据条数
1.1查询出
persons文档中前5条数据
({},{_id:0,name:1}).limit(5)
返回指定数据的跨度
2.1查询出persons文档中5~10条的数据
({},{_id:0,name:1}).limit(5).skip(5)
返回按照年龄排序的数据[1,-1]
({},{_id:0,name:1,age:1}).sort({age:1})
注意:mongodb的key可以存不同类型的数据排序就也有优先级
最小值 null 数字 字符串 对象/文档 数组 二进制 对象ID 布尔 日期
时间戳 à 正则 à 最大值
和Skip完成分页
4.1三条数据位一页进行分页
第一页à({},{_id:0,name:1}).limit(3).skip(0)
第二页à({},{_id:0,name:1}).limit(3).skip(3)
4.2skip有性能问题,没有特殊情况下我们也可以换个思路
对文档进行重新解构设计
每次查询操作的时候前后台传值全要把上次的最后一个文档的日期保存下来
({date:{$gt:日期数值}}).limit(3)
个人建议à应该把软件的中点放到便捷和精确查询上而不是分页的性能上因为用户最多不会翻查过2页的
1.游标
利用游标遍历查询数据
var persons = ();
while(()){
obj = ();
print()
}
2.游标几个销毁条件
1.客户端发来信息叫他销毁
2.游标迭代完毕
3.默认游标超过10分钟没用也会别清除
3.查询快照
快照后就会针对不变的集合进行游标运动了,看看使用方法.
({$query:{name:”Jim”},$snapshot:true})
高级查询选项
$query
$orderby
$maxsan:integer 最多扫描的文档数
$min:doc 查询开始
$max:doc 查询结束
$hint:doc 使用哪个索引
$explain:boolean 统计
$snapshot:boolean 一致快照
1.创建简单索引
for(vari = 0 ; i<200000 ;i++){
({number:i,name:i+"book"})}
1.先检验一下查询性能
var start = new Date()
({number:65871})
var end = new Date()
end - start
2.为number 创建索引
({number:1})
3.再执行第一部的代码可以看出有数量级的性能提升
2.索引使用需要注意的地方
1.创建索引的时候注意1是正序创建索引-1是倒序创建索引
2.索引的创建在提高查询性能的同事会影响插入的性能对于经常查询少插入的文档可以考虑用索引
3.符合索引要注意索引的先后顺序
4.每个键全建立索引不一定就能提高性能呢索引不是万能的
5.在做排序工作的时候如果是超大数据量也可以考虑加上索引用来提高排序的性能
3.索引的名称
3.1用VUE查看索引名称
3.2创建索引同时指定索引的名字
({name:-1},{name:”bookname”})
4.唯一索引
4.1如何解决文档books不能插入重复的数值
建立唯一索引
({name:-1},{unique:true})
试验
.insert({name:”1book”})
5.踢出重复值
5.1如果建议唯一索引之前已经有重复数值如何处理
({name:-1},{unique:true,dropDups:true})
6.1如何强制查询使用指定的索引呢?
({name:"1book",number:1}).hint({name:-1})
指定索引必须是已经创建了的索引
7.1如何详细查看本次查询使用那个索引和查询数据的状态信息
({name:"1book"}).explain()
“cursor” : “BtreeCursor name_-1“ 使用索引
“nscanned” : 1 查到几个文档
“millis” : 0 查询时间0是很不错的性能
1.1在shell查看数据库已经建立的索引
()
()
2.后台执行
2.1执行创建索引的过程会暂时锁表问题如何解决?
为了不影响查询我们可以叫索引的创建过程在后台
({name:-1},{background:true})
3.删除索引
3.1批量和精确删除索引
({dropIndexes :”books” , index:”name_-1”})
({dropIndexes :”books” , index:”*”})
请查询persons中美国学生的人数.
({country:"USA"}).count()
请查询出persons中一共有多少个国家分别是什么.
({distinct:"persons“ ,key:"country"}).values
语法:
({group:{
ns:集合名字,
Key:分组的键对象,
Initial:初始化累加器,
$reduce:组分解器,
Condition:条件,
Finalize:组完成器
}})
分组首先会按照key进行分组,每组的每一个文档全要执行$reduce的方法,
他接收2个参数一个是组内本条记录,一个是累加器数据.
3.1请查出persons中每个国家学生数学成绩最好的学生信息(必须在90以上)
({group:{
ns:"persons",
key:{"country":true},
initial:{m:0},
$reduce:function(doc,prev){
if( > ){
= ;
= ;
= ;
}
},
condition:{m:{$gt:90}}
}})
({group:{
ns:"persons",
key:{"country":true},
initial:{m:0},
$reduce:function(doc,prev){
if(> ){
= ;
= ;
= ;
}
},
finalize:function(prev){
= +" Math scores "+
},
condition:{m:{$gt:90}}
}})
({
name:"USPCAT",
age:27,
email:"2145567457@",
c:89,m:100,e:67,
counTry:"China",
books:["JS","JAVA","EXTJS","MONGODB"]
})
({group:{
ns:"persons",
$keyf:function(doc){
if(){
return{country:}
}else{
return{country:}
}
},
initial:{m:0},
$reduce:function(doc,prev){
if(> ){
= ;
= ;
if(){
= ;
}else{
= ;
}
}
},
finalize:function(prev){
= +" Math scores "+
},
condition:{m:{$gt:90}}
}})
3.2在3.1要求基础之上吧没个人的信息链接起来写一个描述赋值到m上
finalize:function(prev){
= +" Math scores"+
}
4.用函数格式化分组的键
4.1如果集合中出现键Counrty和counTry同时存在那分组有点麻烦这要如何解决呢?
$keyf:function(doc){
return {country:}
},…..
1.命令执行器runCommand
1.1用命令执行完成一次删除表的操作
({drop:"map"})
{
"nIndexesWas" : 2,
"msg" : "indexes dropped for collection",
"ns" : "",
"ok" : 1
}
2.如何查询mongoDB为我们提供的命令
1.在shell中执行()
2.访问网址http://localhost:28017/_commands
3.常用命令举例
3.1查询服务器版本号和主机操作系统
({buildInfo:1})
3.2查询执行集合的详细信息,大小,空间,索引等……
({collStats:"persons"})
3.3查看操作本集合最后一次错误信息
({getLastError:"persons"})
2.固定集合特性
2.1固定集合默认是没有索引的就算是_id也是没有索引的
2.2由于不需分配新的空间他的插入速度是非常快的
2.3固定集合的顺是确定的导致查询速度是非常快的
2.4最适合的是应用就是日志管理
3.创建固定集合
3.1创建一个新的固定集合要求大小是100个字节,可以存储文档10个
("mycoll",{size:100,capped:true,max:10})
3.2把一个普通集合转换成固定集合
({convertToCapped:”persons”,size:100000})
4.反向排序,默认是插入顺序排序.
4.1查询固定集合mycoll并且反响排序
().sort({$natural:-1})
5.尾部游标,可惜shell不支持java和php等驱动是支持的
5.1尾部游标概念
这是个特殊的只能用到固定级和身上的游标,他在没有结果的时候
也不回自动销毁他是一直等待结果的到来
1.启动项 mongod --help
--dbpath |
指定数据库的目录,默认在window下是c:\data\db\ |
--port |
指定服务器监听的端口号码,默认是27017 |
--fork |
用守护进程的方式启动mongoDB |
--logpath |
指定日志的输出路径,默认是控制台 |
--config |
指定启动项用文件的路径 |
--auth |
用安全认证方式启动数据库 |
1.1利用config配置文件来启动数据库改变端口为8888
文件
dbpath = D:\sortware\mongod\db
port = 8888
启动文件
cd C:\Users\thinkpad\Desktop\MONGODB\mongodb-win32-x86_64-2.0.6
bin\ --config ../
shell文件
mongo 127.0.0.1:8888
2.停止mongoDB服务
1.1ctrl+c 组合键可以关闭数据库
1.2admin数据库命令关闭数据
1.导出数据(中断其他操作)
打开CMD
利用mongoexport
-d 指明使用的库
-c 指明要导出的表
-o 指明要导出的文件名
-csv 制定导出的csv格式
-q 过滤导出
--type <json|csv|tsv>
1.1把数据好foobar中的persons导出
mongoexport -d foobar -c persons -oD:/
1.2导出其他主机数据库的文档
mongoexport --host 192.168.0.16 --port 37017
2.导入数据(中断其他操作)
API
/manual/reference/mongoimport/
2.1到入persons文件
mongoimport --db foobar --collection persons --file d:/
1.运行时备份mongodump
API
/manual/reference/mongodump/
1.1导出127.0.0.1服务下的27017下的foobar数据库
mongodump --host 127.0.0.1:27017 -d foobar -o d:/foobar
2.运行时恢复mongorestore
API
/manual/reference/mongorestore/
2.1删除原本的数据库用刚才导出的数据库恢复
()
mongorestore --host 127.0.0.1:27017 -d foobar -directoryperdbd:/foobar/foobar
3.懒人备份
mongoDB是文件数据库这其实就可以用拷贝文件的方式进行备份