美文网首页
Node.js 数据库开发

Node.js 数据库开发

作者: 独木舟的木 | 来源:发表于2018-10-12 15:42 被阅读26次

    MongoDB 数据库

    MongoDB 数据库结构
    • mongoose 中的一切由 schema 开始。 schema 是一种以文件形式存储的数据库模型骨架,并不具备数据库的操作能力。
    • Schema 定义了 model 中的所有属性,而 model 则是对应一个 MongoDB 中的 collection
    • Schema 生成 ModelModel 创造 EntityModelEntity 都可对数据库操作造成影响,但 ModelEntity 更具操作性。

    使用 mongoose 连接 MongoDB

    连接数据库,实现增、删、改、查操作:

    'use strict';
    
    // 引入 mongoose 模块
    const mongoose = require('mongoose');
    
    // 定义数据库地址
    // uri:mongodb://user:pass@localhost:port/database
    const uri = 'mongodb://user:pass@localhost:port/database?authSource=admin';
    
    // 连接 mongoDB 数据库
    mongoose.connect(uri, {useNewUrlParser: true});
    const db = mongoose.connection;
    
    // 将连接绑定到错误事件
    db.on('error', console.error.bind(console, 'MongoDB connection error'));
    
    db.once('open', function() {
        console.log('一次打开记录');
    });
    
    // 定义 Schema
    const Schema = mongoose.Schema;
    // 使用 Schema 构造函数,创建一个新的 Schema 实例
    // 实例化 mongoose.Schema 对象并定义 Model 的属性
    const ArticleScheme = new Schema({
        title: String,
        author: String,
        content: String,
        publishTime: Date
    });
    
    // 将 Schema 注册成 Model
    mongoose.model('Article', ArticleScheme);
    // 如果 Model成功注册,就可以通过如下方式访问模型
    const ArticleModel = mongoose.model('Article');
    
    // 通过 Model 定义 Entity
    var ArticleEntity = new ArticleModel({
        title: 'node.js',
        author: 'node',
        content: 'node.js is great!',
        publishTime: new Date()
    });
    
    // 【将文档插入到集合中】
    ArticleEntity.save(function(err) {
        if (err) {
            console.log('save failed ' + err);
        }else {
            console.log('save successed');
        }
    });
    
    // 【查询】
    // find() 方法,查询所有符合要求的数据
    // findOne() 方法,查询符号要求的第一条数据
    ArticleModel.find({title:'node.js'}, function(err, docs) {
        if (err) {
            console.log('error');
            return;
        }
        console.log('result: ' + docs); // 打印实体
        
        // 【查询纪录后,修改记录的值】
        docs[0].title = 'javascript'; // 修改数据
        docs[0].save(); // 保存修改后的数据
    
        // 【删除数据】
        if (docs) {
            // 遍历文档,逐条删除
            docs.forEach(function(ele) {
                // 只有单个文档可以使用 remove() 方法
                ele.remove();
            })
        }
    })
    
    
    
    
    

    可以将 Model 提取成单独的一个类:

    article.js

    'use strict';
    
    // 导入 mongoo 模块
    const mongoose = require('mongoose');
    
    // 定义 Schema
    const Schema = mongoose.Schema;
    const ObjectId = Schema.ObjectId; // 主键
    
    const ArticleSchema = new Schema({
        id: ObjectId,
        title: {type: String, required: true, max: 100},
        name: {type: String, required: true, max: 100},
        date: {type: date}
    });
    
    // 导出模型
    module.exports = mongoose.model('Article', ArticleSchema);
    

    常见错误

    常见错误:连接 MongdDB 数据库时提示字符串参数失效

    示例代码“

    // 连接 mongoDB 数据库
    mongoose.connect(uri, function(err) {
        if (err) {
            console.log('connect failed' + err);
            return;
        }
        console.log('connect success');
    });
    

    错误提示内容:

    DeprecationWarning: current URL string parser is deprecated, and will be removed in a future version. To use the new parser, pass option { useNewUrlParser: true } to MongoClient.connect.
    

    解决方法:连接时传递参数:

    // 连接 mongoDB 数据库
    mongoose.connect(uri, {useNewUrlParser: true});
    const db = mongoose.connection;
    // 将连接绑定到错误事件
    db.on('error', console.error.bind(console, 'MongoDB connection error'));
    

    常见错误:连接 MongoDB 数据库时授权失败,提示:errmsg: 'Authentication failed.', code: 18

    // uri 后面添加 authDatabase 参数
    mongoose.connect('mongodb://user:password@host:port/dbname?authSource=admin')
    

    解决参考:Authentication in mongoose using SCRAM-SHA-1

    相关文章

      网友评论

          本文标题:Node.js 数据库开发

          本文链接:https://www.haomeiwen.com/subject/pwdgaftx.html