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'}
    });
原文地址:https://www.cnblogs.com/yang-xiao-fan/p/7275519.html