• mongoDB数据库的简单操作


    配置

    • 打开MongoDB-bin文件夹,进入命令行 
      • data文件夹要存在
    mongod --dbpath=E:data
    • 重新打开命令行,输入mongo

    常用命令

    • db 查看当前数据库
    • db.user.insert({}); 向当前数据库中的user集合中插入一个文档
    • db.user.find() 查看当前数据库中user集合的全部文档

    通过NODE对数据库进行操作

    • 安装模块
      npm install mongoose
    • 引入模块
    var mongoose=require('mongoose')
    • 连接数据库
    mongoose.connect('mongodb://127.0.0.1:27017')
    //27017---端口号
     
    • 定义数据库的骨架模型,规定了集合中文档的字段名和字段类型
    var UserSchema=new mongoose.Schema({
        username:String,
        age:Number,
        level:Number
    },{collection:'user'})
    //collection:在数据库中存储的集合的名称,没有指定connection,集合名=模型名->小写->复数  Person->person->people
    //注意:如果不加字段就不能添加此字段
    • 定义可以操作数据库的模型,可以定义多个模型,但是名字不可以相同
    var User=mongoose.model('User',UserSchema)
     

    向集合中插入文档

    • 这是个异步的方法
    User.create({username:'zfpx',age:1},function(err,result)){
        console.log(result);
    }
     
    • 可以存放数组批量保存
    var Person=mongoose.model('Person',personSchema);
    var users=[];
    for(var i=0;i<=10;i++){
        users.push({name:'zfpx'+i,age:i})
    }
    Person.creat(users,function(err,docs){
        console.log(docs)
    })
     

    查询数据库中的数据

    • 一般来说返回整个文档用docs,返回更改后的字段result
    • 查找名字是zfpx1的
    User.find({username:'zfpx1'},function(err,docs){
        console.log(docs)
    })
     
    • 查找所有以zfpx开头的
    User.find({username:/^zfpx/},function (err,docs) {
        console.log(docs)
    });
     
    • 查找age>3的
     
    • 查找age<3的
    User.find({age:{$lt:3}},function (err,docs) {
        console.log(docs)
    });
     

    修改数据

    • 将大于3的数据添加一个level
    User.update({age:{$gt:3}},{level:1},{multi:true},function (err,result) {
        console.log(result)
    });
     
    • 默认只更新匹配后的第一条
    • multi:true}表示匹配到多少条更新多少条
    • {$inc:{level:1}} -> 在原来的基础上增加1,递增
    User.update({age:{$gt:3}},{$inc:{level:1}},{multi:true},function (err,result) {
        console.log(result)
    })
     
    • 参数 
      • param1:修改的范围
      • param2:更改的内容
      • param3:回调函数
    • { ok: 1, nModified: 1, n: 2 } 
      • n:匹配到的记录数
      • nModified :实际更新的记录数

    删除数据

    User.remove({age:{$gt:1}},function (err,result) {
       console.log(result.result)
    });
     

    属性过滤

    find:查询所有

    • name:1表示name需要显示,其他的不显示,但是_id会自动显示,所以可以将_id设置为0,不显示
    Person.find({},{name:1,_id=0},function(err,docs){
    
    })
     

    findOne:最多查找一个

    Person.findOne({username:'zfpx',age:1},function(err,docs){
    if(err){

    }else{
    if(docs){
    console.log('登陆成功')
    }else{
    consloe.log('用户名或密码不正确')
    }
    }
    })

    findById:根据ID查找

    Person.findById(_id,function(err,docs){
        if(err){
    
        }else{
            if(docs){
                console.log('登陆成功')
            }else{
                consloe.log('用户名或密码不正确')
            }
        }
    })
     

    游标

    • skip:跳过指定的条数
    • limit:限定返回的条数,限定返回的最大条数
    • sort(1):排序,1是顺序,0是反序,否则没有顺序
    • exec:此时才会执行
    • 返回一个对象
    //每页的条数
    var pageSize=3;
    //当前是第几页
    var pageNumber=2;
    Person.find().sort({age:1}).skip(3).limit(3).exec(function (err,docs) {
        console.log(docs)
    });
     

    插件

    • 把会话信息保存在mongodb数据库中,要依赖session,session中间件用于保存用户数据
    var session=require('express-session');
    var MongoStore=require('connect-mongo')(session);
    app.use(session({
        resave:true,
        saveUninitialized:true,
        secret:'zfpx',
        <!--指定会话的存储位置-->
        store:new MongoStore({
            url:'mongodb://127.0.0.1/201614blog'
        })
    }));
     
    • flash 是 session 中一个用于存储信息的特殊区域。消息写入到 flash 中,在跳转目标页中显示该消息。flash 是配置 redirect 一同使用的,以确保消息在目标页面中可用。 
      • 会增加req.flash,存一次取一次,之后就被销毁,依赖session
      • 存:req.flash(type,msg);取:req.flash(type);
      • 可以多次写入,所以这是一个数组,所以取得时候转为字符串,一般写在中间件中多次使用
        var flash=require('connect-flash');
        app.use(flash());
         User.create(user,function (err,docs) {
                if(err){
                    //req.session.error='注册失败'
                    req.flash('error','注册失败');
                    res.redirect('back');//从哪里来回哪里去
                }else {
                    req.flash('success','注册成功');
                    res.redirect('/user/signin')
                }
            });
        app.use(function (req,res,next) {
            res.locals.success=req.flash('success').toString();
            res.locals.error=req.flash('error').toString();
            next();
        });
     

    MongoDB文档的主键_id

    • 在MongoDB中,如果不特别指定,每个文档都会生成一个唯一的ObjectId作为其主键_id的值。MongoDB中数据的基本单元称为文档(Document)。文档是MongoDB的核心概念,多个键极其关联的值有序的放置在一起便是文档。
    • 在多个骨架中,我们可能需要用到别人家的主键,方法是:
    • var ObjectId=mongoose.Schema.Types.ObjectId;
      var UserSchema=new mongoose.Schema({
      
      });
      
      var ArticleSchema=new mongoose.Schema({
          createAt:{type:Date,default:Date.now},
          <!-- 因为别人家主键的类型是ObjectId,ref:引用 -->
          //ref:'User'引用User的主键
          user:{type:ObjectId,ref:'User'}
      });
  • 相关阅读:
    [hihocoder-1974] 智能分包 状态压缩dp
    2018北京ICPC D. Frog and Portal 斐波那契数 构造
    [hdu-6621]K-th Closest Distance 主席树 线段树 2019 多校4
    [POJ 2104]K-th Number 主席树 可持久化线段树 入门
    [hdu-6623]Minimal Power of Prime
    [hdu-6608] Fansblog 威尔逊定理 质数的密度分布 2019 多校 3
    [codeforces1000F] One Occurrence
    [python] 机器学习 卷积神经网络 用迁移学习实现人脸识别
    [python] 安装TensorFlow问题 解决Cannot uninstall 'wrapt'. It is a distutils installed project
    浅谈getResource方法
  • 原文地址:https://www.cnblogs.com/yang-xiao-fan/p/7275519.html
Copyright © 2020-2023  润新知