zoukankan      html  css  js  c++  java
  • nodejs-7.1. mongoose模块

    mongoose模块

    一. 概念:

      介绍:是一个第三方模块, 作用:方便在nodejs代码中操作mongodb

      GitHub 地址: https://github.com/Automattic/mongoose

    ★ nodejs-mongo-mongod关系图:

    二、mongoose主要知识点:

    1. _id 是 mongodb 集合中的默认主键. 是唯一的.

    2. schema 、 model 与 entity 的关系: 符合ORM

    ★ ORM 对象数据绑定文档集合,对象在文档就在,对象不再文档也就不再。

    ## 类比: 生产瓶盖
    Schema(架构) => 模具设计稿
    Model(模型) => 模具
    Entity(实体) => 瓶盖

    ## mongoose 命名时的推荐: 为了方便好记

    UserSchema UserModel UserEntity

    ArticleSchema ArticleModel ArticleEntity

    GoodsSchema GoodsModel GoodsEntity

    3. 一般集合数据表名定义为英文单词单数,mongoose 会自动将集合名称变成复数.

    4. schema设定文档字段允许的字段类型:

      String
      Number
      Date
      Buffer (字符串类型)
      Boolean
      Mixed  (任意类型)
      ObjectId (主键信息数字ID)
      Array

    三. 代码使用:
    1. 进入工作目录: cd 文件夹路径
    2. 安装: cnpm install mongoose --save
    3. 操作: 代码栗子链接
      3.1 插入数据 

    //实体对象
    var ArticleEntity = new ArticleModel({
      title: 'cctv',
      content: '下雨天',
      author: 'xf',
      date: Date.now(),
      click: 1
    });
    
    //写入  save 保存
    ArticleEntity.save(function(err, doc){
      if(err){
        console.log(err)
      }else{
        console.log(doc);
      }
      mongoose.connection.close();
    })
    //1. 引入mongoose
    var mongoose = require('mongoose');
    
    //2. 连接mongodb数据库
    mongoose.connect('mongodb://localhost/db3');
    
    //3. 定义文档结构
    var UserSchema = new mongoose.Schema({
    username: String,
    password: String,
    }, {versionKey: false});
    
    //4. 定义模型
    var UserModel = mongoose.model('user', UserSchema);
    
    //5. 创建实体
    var UserEntity = new UserModel({
    username: 'admin',
    password: 'adminxxxxx'
    });
    
    //6. 写入数据库
    UserEntity.save(function(err, user){
    if(err){
    console.log(err);
    }else{
    console.log(user);
    }
    //7. 关闭连接
    mongoose.connection.close();
    });
    app.js

      或者另一种方法插入数据:

        articleModel.create(req.body, function (err) { })

      3.2 删除数据
        ArticleModel.find({id: 100}).remove(function(err){ });
        UserModel.remove({id: 200}, function(err){ })

    var mongoose = require('mongoose');
    
    mongoose.connect('mongodb://localhost/db6');
    
    //文档结构
    var ArticleSchema = new mongoose.Schema({
      title: String,
      content: String,
      author: String,
      date: Date,
      click: Number
    });
    
    //创建模型
    var ArticleModel = mongoose.model('article', ArticleSchema);
    
    //删除  方式一
    /**
     * 
    ArticleModel.find({click:1}).remove(function(err){
      if(err) {
        console.log(err)
      }else{
        console.log('delete');
      }
      mongoose.connection.close();
    })
    */
    // 方式二
      ArticleModel.remove({a:'b'}, function(err){
        if(err){
          console.log('err')
        }else{
          console.log('删除成功');
        }
    
      mongoose.connection.close();
    })
    app.js

      3.3 更新数据
        ArticleModel.update({id: {$lt:24}}, {$set:{'title': 'xxx'}}, function(err){ });

    var mongoose = require('mongoose');
    
    mongoose.connect('mongodb://localhost/db6');
    
    //文档结构
    var ArticleSchema = new mongoose.Schema({
      title: String,
      content: String,
      author: String,
      date: Date,
      click: Number
    });
    
    //创建模型
    var ArticleModel = mongoose.model('article', ArticleSchema);
    
    //更新数据
    ArticleModel.update({title:'aaa'}, {$set:{author: '明月'}}, function(err){
      if(err){
        console.log(err)
      }else{
        console.log('更新成功');
      }
      mongoose.connection.close();
    })
    app.js

      3.4 获取数据 ===> 回调函数中可以对data进行更新修改save或删除remove操作

        获取单条数据:  ArticleModel.findOne({_id:'5b8788d68711943d60ff923b'}, function(err, doc){ });

          根据唯一主键_id查找:ArticleModel.findById('5ab0658ec66711071a6be35a', function(err, data){ })

        获取多条数据:  ArticleModel.find({id:{$lt:26}}, function(err, data){ })

        统计文档的数量: UserModel.count({}, function(err, data){ console.log(data); });

    var mongoose = require('mongoose');
    
    mongoose.connect('mongodb://localhost/db6');
    
    //文档结构
    var ArticleSchema = new mongoose.Schema({
      title: String,
      content: String,
      author: String,
      date: Date,
      click: Number
    });
    
    //创建模型
    var ArticleModel = mongoose.model('article', ArticleSchema);
    
    //获取单条数据
    // ArticleModel.findById('5b8666bc6c6e0fc58352f96a', function(err, doc){
    //   console.log(doc);
    //   mongoose.connection.close();
    // });
    
    // ArticleModel.findOne({}, function(err, data){
    //  console.log(data);
    //  mongoose.connection.close();
    // });
    
    // //多条查询
    // ArticleModel.find({}, function(err, data){
    //  console.log(data);
    //  mongoose.connection.close();
    // });
    
    // //统计
    // ArticleModel.count({}, function(err, count){
    //  console.log(count);
    //  mongoose.connection.close();
    // });
    
    //更新
    // ArticleModel.findById('5b8666bc6c6e0fc58352f96a', function(err, doc){
    // ArticleModel.findOne({_id:'5b8666bc6c6e0fc58352f96a'}, function(err, doc){
     // doc
    //  console.log(doc);
    //  doc.author = '马剑';
    
    //  doc.save(function(err){
    //    if(err){
    //      console.log(err)
    //    }else{
    //      console.log('更新成功');
    //    }
    //    mongoose.connection.close();
    //  })
    // });
    
    //删除
    ArticleModel.findById('5b8666bc6c6e0fc58352f96a', function(err, doc){
     // doc
     doc.remove(function(err){
       if(err){
         console.log(err)
       }else{
         console.log('删除成功');
       }
       mongoose.connection.close();
     })
    });
    app.js

      

      3.5 查询数据
        3.5.1 条件:
          小于: ArticleModel.find({id: {$lt: 24}}, function(err, data){ });
        模糊查询: ArticleModel.find({title: {$regex: /连衣裙/}}, function(err, data){ });
         逻辑与: ArticleModel.find({title: {$regex: /连衣裙/}, id:{$gt: 1490}}, function(err, data){ });
         逻辑或: ArticleModel.find({$or:[{id:{$gt:1490}}, {title:{$regex:/连衣裙/}}]}, function(err, data){ });
        3.5.2 字段: 限定筛选出来的数据哪些字段是要显示的
          ArticleModel.find({id:{$lt: 24}}).select({id:1}).exec(function(err, data){ })
        3.5.3 截取: 应用场景主要用于分页显示效果
          ArticleModel.find({id:{$lt: 30}}).limit(5).exec(function(err, data){ })
          ArticleModel.find({id:{$lt: 30}}).skip(5).limit(5).exec(function(err, data){ })
        3.5.4 排序:
          ArticleModel.find({id:{$lt: 30}}).sort({id:-1}).exec(function(err, data){ })

    var mongoose = require('mongoose');
    
    mongoose.connect('mongodb://localhost/project');
    
    //定义结构
    var GoodsSchema = new mongoose.Schema({
      id: Number,
      title: String,
      price: Number,
      pic: String,
      user_id: Number
    });
    
    //创建模型
    var GoodsModel = mongoose.model('goods', GoodsSchema);
    
    // 读取数据  
    /*
    GoodsModel.find({price: {$lt: 9.9}}, function(err, data){
      if(err){
        console.log(err)
      }else{
        console.log(data);
      }
      mongoose.connection.close();
    });
    */
    
    // 读取数据 模糊查询
    /*
    GoodsModel.find({title: {$regex: /显瘦/}}, function(err, data){
      console.log(data);
    
      mongoose.connection.close();
    });
    */
    
    //字段筛选
    /*
    GoodsModel.find().select({id:1,_id:0,title:1}).exec(function(err, data){
      console.log(data);
      mongoose.connection.close();
    });
    */
    
    //截取数据
    /*
    GoodsModel.find().limit(5).exec(function(err, data){
      console.log(data);
      mongoose.connection.close();
    })
    
    GoodsModel.find().skip(5).limit(5).exec(function(err, data){
      console.log(data);
      mongoose.connection.close();
    });
    */
     
    //排序   先排序后截取
    GoodsModel.find().limit(5).sort({id:1}).exec(function(err,data){
      console.log(data);
      mongoose.connection.close();
    });
    app.js

    四. 数据关联

    // 引入数据库配置模块
    var mongoose = require('../configs/db_config.js');
    
    // 定义 user 数据的 骨架(用来约束 itmes 这个集合的)
    var articleSchema = new mongoose.Schema({
        // 关联栏目
        itemId:{
            type: 'ObjectId',
            // 关联集合
            ref:'item'
        },
        // 文章标题
        title: String,
        // 作者
        author: String,
    })
    
    // 3.创建数据库模型      (在数据库里创建集合的时候 会自动帮你变成 复数)
    var articleModel = mongoose.model('article', articleSchema);
    
    // 暴露数据库模型
    module.exports = articleModel;
    articleModel.js
    // 引入数据库配置模块
    var mongoose = require('../configs/db_config.js');
    
    // 定义 user 数据的 骨架(用来约束 itmes 这个集合的)
    var itemSchema = new mongoose.Schema({
        // 栏目名称
        name: String,
        // 创建时间
        ctime: {
            type:Date,
            default:  new Date()   // 默认值
        },      
        // 栏目的排序
        order:Number,
        // 栏目描述
        description: String      
    })
    
    // 3.创建数据库模型      (在数据库里创建集合的时候 会自动帮你变成 复数)
    var itemModel = mongoose.model('item', itemSchema);
    
    // 暴露数据库模型
    module.exports = itemModel;
    itemModel.js
     // populate 去查关联的集合
     articleModel.find().populate('itemId',{name:1}).exec(function (err, data) {
                console.log(data);
                if (err) {
                    console.log('数据添加数据失败');
                } else {
                    // 响应模版 发送数据
                    res.render('admin/articleList', { articlelist: data});
                }
            })
    router.js

  • 相关阅读:
    用ASP.NET开发三层架构
    关于DataGrid模板列里的Checkbox全选个人总结
    javascript实现日期星期的显示
    在两个ASP.net页面之间传递值
    你有没有成为技术作家的潜力
    关于SharePoint 2007中的InfoPath Form Service的一点小问题
    关于MOSS SDK的Web Content Management
    [MOSS汇编SDK]Web Content Management:自定义页面的工具栏
    关于修改域用户密码的WebPart的问题的问题.
    [MOSS 译]如何:在WEB内容查询部件中使用自定义的字段
  • 原文地址:https://www.cnblogs.com/xzsz/p/9554770.html
Copyright © 2011-2022 走看看