一. 安装mongodb
1. 下载地址: https://www.mongodb.org/dl/win32/mongodb-win32-i386-v3.0-latest.zip
2. 在D盘新建文件夹 mongodb,复制解压后的文件到这里
3. 把mongodb文件夹的路径追加到系统变量path后面
4. 在D盘新建一个文件夹命名为mongodbData,用于存放mongodb的数据
5. 把开cmd,进入mongodb文件夹下的bin,运行: mongod –dbpathd:\mongodbData
6. 获得端口号27017, 安装完毕
二. 启动mongodb
1. 建立快速启动文件mongodb.bat
d: && mongod--dbpath D:\MongodbData
2. 新建数据库
建立快速文件 mongodb27017.bat
mongo127.0.0.1:27017/admin
创建新数据库 use [databasename] 如: use foobar
给指定数据库添加集合并添加记录 db.[documentName].insert({…})
db.persons.insert({name:”uspcat”})
db表示本数据库,persons为集合
3. 查看数据库 show dbs
4. 查看所有文档 show collections //persons(新创建) system.indexes (系统生成,负责存储索引)
5. 查找指定文档数据db.[documentName].find()
//查询第一条 db.[documentName].findOne()
db.system.indexes.find()
//db.persons.find()
6. 更新文档db.[documentName].update({查询条件},{更新内容}) ///$set 修改器
db.persons.update({name:”extjs4.0”},{$set:{name:”extjs4.1”}})
7. 删除文档db.[documentName].remove({要删除的对象})
db.persons.remove({age:1})
8. 删除库中的集合 db.[documentName].drop()
db.persons.drop()
9. 删除数据库db.dropDatabase()
10. Shell的help
全局数据库db.help()
集合 db.[documentName].help()
11. 数据库和集合命名规范
不能是空字符串
不得含有 ‘ ‘ (空格) 、‘,` % / \ 和空字符
应全部小写
最多64个字节
数据库名不能和现有系统保留库同名, 如 admin, local, config
12. 例外合法的命名(避免使用)
db-text 但是不能能过db.[documentName]得到,要改用db.getCollection(documentName),因为会被当作是减法操作
db.getCollection(“db-text”).text.insert({name:”mick”})
13. 内置js引擎,可以直接执行js(任何)代码
Function insert(object){
db.getCollection(“db-text”).text.insert(object)
}
Insert({age:32})
使用eval
db.eval(“return ‘uspcat’”)
三. 增删改查
1. 插入文档db.[documentName].insert({})
db.persons.insert({_id:”001”,name:”yun”})
2. 批量插入文档(shell不支持批量插入, 要用for循环完成或者mongo驱动)
for(vari=0;i<10;i++){
db.persons.insert({name:i})
}
3. save操作 ( 当插入时遇到_id相同的情况,insert会报错,而用save则会变成更新操作,把_id对象的内容替换.
db.persons.save({_id:”001”,name:i})
4. 删除列表中所有数据db.[documentName].remove()
集合的本身和索引不会被删除: show collections /db.system.indexes.find()
5. 根据条件删除(删除指定的数据 db. [documentName].remove(条件))
db.persons.remove({_id:1}))
(如果集合中要删除的很多,建议删除正合集合再重新建立)
6. 强硬的文档代换式更新操作(会用新的文档替换旧文档)
db.[documentName].update({查询器},{修改器})
(如替换后的_id和现有的_id冲突,系统将报错)
7. update的第三个参数 insertOrUpdate , 查询器能查出来就更新,查不出来就插入
db.[documentName].update({查询器},{修改器},true)
8. 批量更新操作 当查出多条数据时默认修改第一条数据,如要实现批量修改,需要第四个参数 db.[documentName].update({查询器},{修改器},false,true)
四. 修改器
1. $set 用来指定一个键值,如果已存在就修改否则添加{$set{field:value}}
db.persons.update({name:4},{$set:{name:”uspcat”}})
2. $inc 只使用于数字类型, 他可以为指定的键对应的数字类型的数值进行加减操作{$inc:{field:value}}
db.persons.update({age:27},{$inc:{age:1}}) ////{“_id”:0“, age”:28}
3. $unset 删除指定的键 {$unset:{field:1}}
db.persons.update({age:28},{$unset:{age:1}})
4. $push 如指定的键是数组则追加,否则中断报错,如果不存在则创建数组 {$push:{field:value}}
db.persons. update({_id:5},{$push:{books:”JS”}})
5. $pushAll 批量添加数组数据, 用法与$push类似 {$pushAll:{field:array}}
db.persons.update({_id:5},{$pushAll:{books:[“EXTJS”,”JS”]}})
6. $addToSet 往指定键值的数组添加, 当目标数组存在则不操作,不存在则添加 {$addToSet:{field:value}}
{$addToSet:{books:”JS”}}
7. $pop 从指定数组删除一个值 1 表示删除最后一个值, -1表示删除第一个值{$pop:{field:value}}
{$pop:{name:1}}
8. $pull 删除被指定的值 {$pull:{field:value}}
{$pull:{“book”:”JS”}}
9. $pullAll 一次性删除多个指定的数值 {$pullAll:{field:arry}}
{$pullAll:{“name”:[“JS”,”JAVA”]}}
10. 数组定位器($) 如值内有多个数组,只想操作一部份
{name:”YFC”,age:27,books:[{type:”JS”,name:”EXTJS4”},{type:”JS”,name:”JQUERY”}]}
要向type为JS的文档增加一个作者 author:USPCAT
db.text.update({“books.type”:”JS”},{$set:{“books.$.author”:”USPCAT”}})
上面提到的修改器,都是放在对象的前面{$set:{“books.$.author”:”USPCAT”}},后面要学的查询器是放到对象内层
11. 批量数组更新 $addToSet与 $each结合db.text.update({_id:100},{$addToSet:{books:{$each:[“JS”,”DB”]}}})
$each会循环后面的数组把每一个数值进行$addToSet操作
12. 内存分配与查询效率
Document被创建的时候,DB为其分配内存和预留内存,当修改操作不超过预留内存的时候,速度非常快,如果超过了则会分配新的内存而消耗时间.
五. mongoDB的特殊函数 (runCommand函数专门用于执行特殊函数)
1. findAndModify 特殊函数,用于返回update或remove后的文档,一次只能处理一个文档,也不能执行upsert操作,只能更新已有文档.
runCommand({“findAndModify”:”processes”,query:{查询器},sort{排序},new:true}).value///update:{更新器},remove:true
ps=db.runCommand({
“findAndModify”:”persons”, //指定数据集合
“query”:{“name”:”text”}, //查询对象,只能针对单文档
“update”:{“$set”:{“email”:”1221”}}, //修改器
“new”:true //
}).value
Do_something(ps)
六. 查询
1. 指定返回的键
db.[documentName].find({条件},{键指定})
数据准备->persons.json
查询所有数据的指定键(name,age,country)
db.persons.find({},{name:1,age:1,countru:1,_id:0}) // 1表示查询, 0表示不查
2. 查询条件 (为空表示不限条件)
$lt < {age:{$gte:22,$lte:27}} ///大于等于22,小于等于27
$lte <=
$gt >
$gte >=
$ne != {age:{$ne:26}}
db.persons.find({age:{$gte:25,$lte:27}},{_id:0,name:1,age:1}) //查询年龄在25至27之间
db.persons.find({country:{$ne:”Korea”}},{_id:0,m:1}) //查询不是韩国的学生的数学成绩
3. $in 或 $nin (包含或不包含)
db.persons.find({country:{$in:[“USA”,”China”]}}) //查询中国和美国的学生
db.persons.find({country:{$nin:[“USA”,”China”]}}) //查询非中国和美国的学生
4. $or查询
db.persons.find({$or:[{cn:{$gt:85}},{en:{$gt:90}}]},{_id:0,e:1,c:1,name:1})
//查询语文成绩大于85 或者英语成绩大于90的学生
5. null 查询此项为null的信息
db.persons.find({sex:{$in:[null]}},{_id:0,name:1,sex:1})
//查询性别为null的学生
6. 使用正则查询
db.persons.find({name:/li/i},{_id:0,name:1}) //查询名字中存在li的学生
7. $not 可以用在任何地方进行取反操作
db.persons.find({name:{$not:/li/i}},{_id:0,name:1})
//$not和$nin的区别是,$not可以用在任何地方,$nin只用在集合上
8. 数组查询$all和index应用
//查询所有喜欢MONGODB和JS的学生
db.persons.find({books:{$all:[“MONGODB”,”JS”]}},{books:1,_id:0})
//查询第二本书是JAVA的信息
db.persons.find({“books.1”:”JAVA”},{_id:0,name:1})
9. 查询指定长度数组$size, 不能与比较查询符一起使用()
//查询喜欢书籍数量为4本的学生
db.persons.find({books:{$size:4}},{_id:0,name:1})
//查询喜欢书籍大于3本的学生
//1.增加字段用于统计
db.persons.update({},{$set:{size:4}},false,true)
//2.改变书籍的更新方式,每次增加书籍时,size加1
db.persons.update({name:”jim”},{$push:{books:”ORACLE”},$inc:{size:1}})
//3.利用$gt查询
db.persons.find({size:5},{_id:0,name:1,sex:1}) //db.persons.find({size:{$gt:3}})
//利用shell查询Jim喜欢看的书的数量
var persons =db.persons.find({name:”Jim”}) //多个
while(persons.hasNext()){ //遍历邮标
obj=persons.next();
print(obj.books.length)
}
Shell是个彻底的JS引擎,但是一些特殊的操作要靠各个驱动来完成(JAVA,NODEJS)
10. $slice操作符返回文档中指定数组的内部值
//查询Jim书架中第二至四本书
db.persons.find({name:”Jim”},{books:{$slice:[1,3]},_id:0})
//查询最后一本书
db.persons.find({name:”Jim”},{books:{$slice:-1},_id:0})
11. 文档查询
为Jim添加学习简历文档 jim.json
//查询出在K学校上过学的学生
//问题1 局限,用绝对匹配可以完成,完全匹配,查询顺序也要一致
db.persons.find({school:{school:”K”,score:”A”}},{_id:0,school:1})
//问题2 顺序问题可以用 对象”.” 的方式定位,但是会附带数组内其他元素的查询score
db.persons.find({“school.score”:”A”,”school.school”:”K”},{_id:0,school:1})
//正确做法,使用单条条件组查询$elemMatch,会将查询条件当成一个组合,进行遍历,只有满足组合所有条件的
db.persons.find({school:{$elemMatch:{school:”K”,score:”A”}}},{_id:0,school:1})
12. $where 查询复杂信息,万能查询,但是会消耗性能,尽量减少使用
//查询年龄大于22岁,喜欢看C++书,在K学校上过学的学生
db.persons.find({“$where”:function(){
//得到查询文档的每一条文档
var books=this.books;
//得到文档中的school对象
var school=this.school;
if(this.age>22){
var php=null;
//遍历书籍
for(var i=0;i<books.length;i++){
if(books[i]==”C++”){
php=books[i];
//如果学校为真
if(school){
for(varj=0;j<school.length;j++){
//判断是否在K上过学
if(school[j].school==”K”){
return true;
}
}
break;
}
}
}
}
}})
本文详细介绍了MongoDB的安装步骤及基本操作方法,包括创建数据库、集合、执行增删改查等常见操作。
1382

被折叠的 条评论
为什么被折叠?



