mongod笔记

3.数据库是什么
    数据库(DataBase)是按照数据结构来组织、存储和管理数据的仓库。
4.数据库的分类
    1) 关系型数据库(RDBS)
        代表有:MySQL、Oracle、DB2、SQL Server...
        特点:关系紧密,都是表
    2) 非关系型数据库(NoSQL)
        代表有:MongoDB、Redis...
        特点:关系不紧密,有文档,有键值对
5.安装MongoDB
    1) 安装 https://www.mongodb.org/dl/win32/
    2) 配置环境变量
        C:\Program Files\MongoDB\Server\3.2\bin
    3) 在c盘根目录
        - 创建一个文件夹 data
        - 在data中创建一个文件夹db
        
    4) 打开cmd命令行窗口
        - 输入 mongod 启动mongodb服务器
        - 32位注意
            启动服务器时,需要输入如下内容(首次输入即可,首次不用输入mongod,后面直接输入mongod即可)
                mongod --storageEngine=mmapv1
                
        - 自定义数据库存放路径(可选)        
                mongod --dbpath 数据库路径(db路径) --port 端口号      
                                         配置数据库放置路径,端口号建议采用默认的,如果自己设置大于四位数小于65535        
    5)  在打开一个cmd窗口
        - 输入 mongo 连接mongodb ,出现 > 
        
        - 数据库(database)
        - 数据库的服务器
            - 服务器用来保存数据
            - mongod 用来启动服务器
            
        - 数据库的客户端
            - 客户端用来操作服务器,对数据进行增删改查的操作
            - mongo 用来启动客户端
            
            
6.将MongoDB设置为系统服务,可以自动在后台启动,不需要每次都手动启动
        1.在c盘根目录创建data
            - 在data下创建db和log文件夹
        2.创建配置文件
            在目录 C:\Program Files\MongoDB\Server\3.2 下添加一个配置文件mongod.cfg
            配置文件内容:
                systemLog:
                    destination: file
                    path: C:\data\log\mongod.log
                storage:
                    dbPath: C:\data\db
        3.以管理员的身份打开命令行窗口    
        
        4.执行如下的命令
            sc.exe create MongoDB binPath= "\"C:\Program Files\MongoDB\Server\3.2\bin\mongod.exe\" --service --config=\"C:\Program Files\MongoDB\Server\3.2\mongod.cfg\"" DisplayName= "MongoDB" start= "auto"    
            sc.exe create MongoDB binPath= "\"      mongod的bin目录          \mongod.exe\" --service --config=\"      mongo的安装目录(bin上面一层)        \mongod.cfg\"" DisplayName= "MongoDB" start= "auto"
            
        5.任务管理器启动mongodb服务

        6.如果启动失败,证明上边的操作有误,
            在控制台输入 sc delete MongoDB 删除之前配置的服务
            然后从第一步再来一次
                
7.MongoDB基本指令
        1)show dbs
          show databases
            - 显示所有的数据库
        2)use 数据库名
            - 进入到指定的数据库中
        3)db
            - db表示的是当前所处的数据库
        4)show collections
            - 显示数据库中所有的集合
    !!    在MongoDB中,数据库和集合都不需要手动创建,当我们创建文档时,如果文档所在的集合或数据库不存在会自动创建数据库和集合
1.数据库的CRUD(增删改查)的操作
            1)增:
              db.集合名.insert(doc)
                - 向集合中插入一个文档(一般为对象,或数组)
                - 例子:向test数据库中的,stus集合中插入一个新的学生对象
                    db.stus.insert({name:"孙悟空",age:18,gender:"男"})
                    db.stus.insert([{name:"孙悟空",age:18,gender:"男"},{}])
              db.collection.insertOne()
                - 插入一个文档对象
              db.collection.insertMany() 
                - 插入多个文档对象            
            2)删:
                db.collection.remove(查询条件)
                - 删除一个或多个,第二个参数传递一个true,则只会删除一个,默认false,删除多个
                        db.collection.remove({name:"王强"},true)
                        db.collection.remove({name:"王强"})
                - 如果传递一个空对象作为参数,则会删除所有的,不传不行
                        db.collection.remove({})
                        db.collection.drop() 删除集合
                        db.dropDatabase() 删除数据库
                db.collection.deleteOne({name:"王强"}):删除第一个
                db.collection.deleteMany({name:"王强"}):删除多个
                - 一般数据库中的数据都不会删除,所以删除的方法很少调用
                    一般会在数据中添加一个字段,来表示数据是否被删除  {isDel:0}没有删除    {isDel:1}删除  
            3) 改:
                db.collection.update(查询条件,新对象)
                    1. update()默认情况下会使用新对象来替换旧的对象
                         db.stus.update({name:"沙和尚"},{age:28})
                         
                    2. 如果需要修改指定的属性,而不是替换需要使用“修改操作符”来完成修改
                        $set 可以用来修改文档中的指定属性
                        $unset 可以用来删除文档的指定属性
                        $push 用于向数组中添加一个新的元素
                        $addToSet 向数组中添加一个新元素 , 如果数组中已经存在了该元素,则不会添加
                        $inc 自增,在原来的值上面增加一个数值
                        update()默认只会修改一个
                                 一个对象设置属性:
                        db.stus.update(
                            {"_id" : ObjectId("59c219689410bc1dbecc0709")},
                            {$set:{
                                gender:"男",
                                address:"流沙河"
                            }}    
                        )
                        一个对象删除属性:
                        db.stus.update(
                            {"_id" : ObjectId("59c219689410bc1dbecc0709")},
                            {$unset:{
                                address:1
                            }}    
                        )
                        多个对象设置:
                        db.stus.update(
                            {"name" : "猪八戒"},
                            
                            {
                                $set:{
                                address:"呵呵呵"
                                }
                            }  ,
                            {
                                multi:true
                            }    
                        )                    
                    3. db.collection.replaceOne(查询条件,新对象):替换一个文档    
                                db.stus.replaceOne({name:"沙和尚"},{age:28})                    - 
                       db.collection.updateOne(查询条件,新对象):修改一个符合条件的文档  
                                   db.stus.updateOne(
                                    {"_id" : ObjectId("59c219689410bc1dbecc0709")},
                                    {$set:{
                                        gender:"男",
                                        address:"流沙河"
                                    }}    
                                )                        - 
                       db.collection.updateMany(查询条件,新对象):同时修改多个符合条件的文档
                                   db.stus.updateMany(
                                    {"_id" : ObjectId("59c219689410bc1dbecc0709")},
                                    {$set:{
                                        gender:"男",
                                        address:"流沙河"
                                    }}    
                                )                                    
                                   
            4)查:
               db.集合名.find()
                - 查询当前集合中符合条件的的所有的文档
                    db.集合名.find()/db.集合名.find({}):查询当前集合中的所有的文档,返回一个数组
                    db.集合名.find({属性:值}):查询当前集合中符合条件的所有文档,返回一个数组
                    db.集合名.findOne({属性:值}):查询当前集合中符合条件的的第一个文档,返回一个对象                    
                    db.users.find({'hobby.movies':"hero"});如果要通过内嵌文档来对文档进行查询,此时属性名必须使用引号
                                    这句话的意思是: 查询hobby属性的movies属性值中包含hero元素的文档
                    db.emp.find({},{ename:1 , _id:0 , sal:1}):在查询时,可以在第二个参数的位置来设置查询结果的 投影 1代表显示 0代表不显示                
                        查询操作符:
                            //18.查询numbers中num值有500的文档
                                db.numbers.find({num:500})                            
                            //19.查询numbers中num大于5000的文档
                                db.numbers.find({num:{$gt:500}});大于
                                db.numbers.find({num:{$eq:500}});等于
                                db.numbers.find({num:{$gte:500}});大于等于                            
                            //20.查询numbers中num小于30的文档
                                db.numbers.find({num:{$lt:30}});小于
                                db.numbers.find({num:{$lte:30}});小于等于                            
                            //21.查询numbers中num大于40小于50的文档
                                db.numbers.find({num:{$gt:40 , $lt:50}});
                            //21.查询工资小于1000或大于2500的员工
                                db.emp.find({$or:[{sal:{$lt:1000}} , {sal:{$gt:2500}}]});                            
                            //22.查看numbers集合中的前10条数据    
                                db.numbers.find().limit(10);                            
                            //23.查看numbers集合中的第11条到20条数据
                                db.numbers.find().skip(10).limit(10);
                                                                         
                                skip((页码-1) * 每页显示的条数).limit(每页显示的条数);
                                MongoDB会自动调整skip和limit的位置
                5)其他方法:
                    db.集合名.find()/db.集合名.find({}).count():查询文档个数
                    db.numbers.find().skip(10).limit(10):skip()用于跳过指定数量的数据,limit()设置显示数据的上限,MongoDB会自动调整skip和limit的位置,skip永远在前
                    db.emp.find({}).sort({sal:1,empno:-1}):可以用来指定文档的排序的规则,sort()需要传递一个对象来指定排序规则 1表示升序 -1表示降序(先sal,后empno)
                    
                    
                    
        
2.文档之间的关系
    一对一(one to one)
        - 夫妻 (一个丈夫 对应 一个妻子)
        - 在MongoDB,可以通过内嵌文档的形式来体现出一对一的关系
    
    一对多(one to many)/多对一(many to one)
        - 父母 - 孩子
              用户 - 订单
              文章 - 评论
              - 也可以通过内嵌文档来映射一对多的关系
              - 或通过_id属性值或其他属性让多个集合建立联系
             
    多对多(many to many)
      - 分类 - 商品
              老师 - 学生 
                  通过_id属性值或其他属性让多个集合建立联系
              
3.使用mongoose模块操作数据库
    1.下载安装Mongoose
        npm i mongoose --save
    2.在项目中引入mongoose
        var mongoose = require("mongoose");
    3.连接MongoDB数据库
         mongoose.connect('mongodb://localhost(数据库的ip地址):端口号/mongoose_test(数据库名)', { useMongoClient: true})
         - 如果端口号是默认端口号(27017) 则可以省略不写                                                                           链接mongo客户端,可以省略

     4.断开数据库连接(一般不需要调用)
             mongoose.disconnect()

    - 监听MongoDB数据库的连接状态
        - 在mongoose对象中,有一个属性叫做connection,该对象表示的就是数据库连接
            通过监视该对象的状态,可以来监听数据库的连接与断开

        数据库连接成功的事件
        mongoose.connection.once("open",function(){});

        数据库断开的事件
        mongoose.connection.once("close",function(){});
        
        Schema 模式/约束对象
        Model 模型对象(相当于数据库集合)
        Document (相当于数据库文档)
        
        var mongoose = require("mongoose");
        mongoose.connect("mongodb://127.0.0.1/mongoose_test",{useMongoClient:true});                
        //将mongoose.Schema 赋值给一个变量
        var Schema = mongoose.Schema;        
        //创建Schema(模式)对象
        var stuSchema = new Schema({        
            name:String,
            gender:{
                type:String,//类型
                default:"female"//默认值
            },
        });                
        //mongoose.model(modelName, schema):
        //modelName 就是要映射的集合名 mongoose会自动将集合名变成复数   通过schema来约束Model
        var StuModel = mongoose.model("student" , stuSchema);        
        //向数据库中插入一个文档
        //StuModel.create({}, function(err){});
        
4.Model方法
    1.增
        Model.create(doc(s), [callback])
     - 用来创建一个或多个文档并添加到数据库中
     - 参数:
         doc(s) 可以是一个文档对象,也可以是一个文档对象的数组
         callback 当操作完成以后调用的回调函数
                 参数1:err
                 参数2:插入的文档,数组形式
     2.删
          Model.remove(conditions, [callback])
         Model.deleteOne(conditions, [callback])
         Model.deleteMany(conditions, [callback])
             conditions:条件
             callback:回调函数  参数1 err
    3.改
         Model.update(conditions, doc, [options], [callback])   默认修改一个
         Model.updateMany(conditions, doc, [options], [callback])
         Model.updateOne(conditions, doc, [options], [callback])
             - 用来修改一个或多个文档
             - 参数:
                 conditions 查询条件
                 doc 修改后的对象   {$set:{age:20}}
                 options 配置参数   {multi:true}修改多个  {multi:false}修改一个,默认修改一个
                 callback 回调函数   参数1 err
         Model.replaceOne(conditions, doc, [options], [callback])
    4.查
         Model.find(conditions, [projection], [options], [callback])
             - 查询所有符合条件的文档 总会返回一个数组
         Model.findById(id, [projection], [options], [callback])
             - 根据文档的id属性查询文档
         Model.findOne([conditions], [projection], [options], [callback])
             - 查询符合条件的第一个文档 总和返回一个具体的文档对象
    
             conditions 查询的条件    {}传空对象表示查询全部
             projection 投影 需要获取到的字段
                 - 两种方式
                     {name:1,_id:0} 1显示  0不显示
                     "name -_id"    加负号不显示
             options  查询选项(skip limit)
                     {skip:3 , limit:1}
             callback 回调函数,查询结果会通过回调函数返回
                         回调函数必须传,如果不传回调函数,压根不会查询
                         
         Model.count(conditions, [callback])//目前以废弃
         Model.countDocuments(conditions, [callback])
             - 统计文档的数量的
             conditions:条件
             callback:回调函数 参数1 err 参数2 count满足条件的文档个数
5.Document
    Document 和 集合中的文档一一对应 , Document是Model的实例,通过Model查询到结果都是Document
    1)创建一个Document
        var stu = new StuModel({name:"奔波霸",});
    2)stu.save(function (err) {}):添加对象,只有调用这个方法数据库里的文档数据才能发生改变
    3)doc.update({$set:{age:28}},function (err) {}):修改对象
    4)doc.remove(function (err) {}):删除对象
    5)        doc.get(name)
                - 获取文档中的指定属性值
            doc.set(name , value)
                - 设置文档的指定的属性值
            doc.id
                - 获取文档的_id属性值
            doc.toJSON() 有问题
                 - 转换为一个JSON对象
            doc.toObject()
                 - 将Document对象转换为一个普通的JS对象
                     转换为普通的js对象以后,注意所有的Document对象的方法或属性都不能使用了

                                    
            
                        -                
            
                   
                    
                    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值