Mongodb学习笔记速记(一)

本文详细介绍了MongoDB的安装步骤及基本操作方法,包括创建数据库、集合、执行增删改查等常见操作。

一.   安装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;

}

}

}

}

}})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值