【探究】NoSQL数据库学习(二)

2024-06-07 15:32
文章标签 学习 nosql 数据库 探究

本文主要是介绍【探究】NoSQL数据库学习(二),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

写在前面

之前一篇简单介绍了NoSQL数据库mongoDB的基本语法,暂且不深入研究它高级的用法,这一节具体谈谈nodeJS里如何快速操作mongoDB数据库,也好快速上手。

mongoose介绍

基本概念

Schema —— 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力
Model —— 由Schema发布生成的模型,具有抽象属性和行为的数据库操作对
Entity —— 由Model创建的实体,他的操作也会影响数据库

记住这三者的关系:Schema生成Model,Model创造Entity,Model和Entity都可对数据库操作造成影响,但Model比Entity更具操作性。

连接数据库

mongoDB安装好之后默认会生成一个test数据库,我们就以这个为例子。

var mongoose = require('mongoose');    //引用mongoose模块
var db = mongoose.createConnection('localhost','test'); //创建一个数据库连接

打开本机localhost的test数据库时,我们可以监测是否有异常

 db.on('error',console.error.bind(console,'连接错误:'));db.once('open',function(){//一次打开记录console.log('数据库连接成功!');});

简单操作

成功开启数据库后,就可以执行数据库相应操作,假设以下代码都在回调中处理。

定义一个schema

var PersonSchema = new mongoose.Schema({name:String   //定义一个属性name,类型为String
});

将该Schema发布为Model

var PersonModel = db.model('Person',PersonSchema);
//如果该Model已经发布,则可以直接通过名字索引到,如下:
//var PersonModel = db.model('Person');
//如果没有发布,上一段代码将会异常

用Model创建Entity

var personEntity = new PersonModel({name:'Krouky'});
//打印这个实体的名字看看
console.log(personEntity.name); //Krouky

我们甚至可以为此Schema创建方法

//为Schema模型追加speak方法PersonSchema.methos.speak = function(){console.log('我的名字叫'+this.name);}var PersonModel = db.model('Person',PersonSchema);var personEntity = new PersonModel({name:'Krouky'});personEntity.speak();//我的名字叫Krouky

Entity是具有具体的数据库操作CRUD的

personEntity.save();  //执行完成后,数据库就有该数据了

如果要执行查询,需要依赖Model,当然Entity也是可以做到的

PersonModel.find(function(err,persons){//查询到的所有personconsole.log(persons);
});

注意:
1. 具体的如何配置Schema、Model以及Model和Entity的相关操作,我们会在后面进行
2. Model和Entity都有能影响数据库的操作,但仍有区别,后面我们也会做解释

一个lib式的实例

下面是个很好的例子,基本囊括了mongoose操作mongoDB的常用操作,初学者大可以奉为library。

mongoose官方API http://mongoosejs.com/docs/api.html

// mongoose 链接
var mongoose = require('mongoose');
var db       = mongoose.createConnection('mongodb://127.0.0.1:27017/NodeJS'); 
// 链接错误
db.on('error', function(error) {console.log(error);
});
// Schema 结构
var mongooseSchema = new mongoose.Schema({username : {type : String, default : '匿名用户'},title    : {type : String},content  : {type : String},time     : {type : Date, default: Date.now},age      : {type : Number}
});
// 添加 mongoose 实例方法
mongooseSchema.methods.findbyusername = function(username, callback) {return this.model('mongoose').find({username: username}, callback);
}
// 添加 mongoose 静态方法,静态方法在Model层就能使用
mongooseSchema.statics.findbytitle = function(title, callback) {return this.model('mongoose').find({title: title}, callback);
}
// model
var mongooseModel = db.model('mongoose', mongooseSchema);
// 增加记录 基于 entity 操作
var doc = {username : 'emtity_demo_username', title : 'emtity_demo_title', content : 'emtity_demo_content'};
var mongooseEntity = new mongooseModel(doc);
mongooseEntity.save(function(error) {if(error) {console.log(error);} else {console.log('saved OK!');}// 关闭数据库链接db.close();
});
// 增加记录 基于model操作
var doc = {username : 'model_demo_username', title : 'model_demo_title', content : 'model_demo_content'};
mongooseModel.create(doc, function(error){if(error) {console.log(error);} else {console.log('save ok');}// 关闭数据库链接db.close();
});
// 修改记录
mongooseModel.update(conditions, update, options, callback);
var conditions = {username : 'model_demo_username'};
var update     = {$set : {age : 27, title : 'model_demo_title_update'}};
var options    = {upsert : true};
mongooseModel.update(conditions, update, options, function(error){if(error) {console.log(error);} else {console.log('update ok!');}//关闭数据库链接db.close();
});
// 查询
// 基于实例方法的查询
var mongooseEntity = new mongooseModel({});
mongooseEntity.findbyusername('model_demo_username', function(error, result){if(error) {console.log(error);} else {console.log(result);}//关闭数据库链接db.close();
});
// 基于静态方法的查询
mongooseModel.findbytitle('emtity_demo_title', function(error, result){if(error) {console.log(error);} else {console.log(result);}//关闭数据库链接db.close();
});
// mongoose find
var criteria = {title : 'emtity_demo_title'}; // 查询条件
var fields   = {title : 1, content : 1, time : 1}; // 待返回的字段
var options  = {};
mongooseModel.find(criteria, fields, options, function(error, result){if(error) {console.log(error);} else {console.log(result);}//关闭数据库链接db.close();
});
// 删除记录
var conditions = {username: 'emtity_demo_username'};
mongooseModel.remove(conditions, function(error){if(error) {console.log(error);} else {console.log('delete ok!');}//关闭数据库链接db.close();
});

总结

独自摸索一门新的技术,我习惯的思路是螺旋式上升。首先了解改技术的发展历史,追溯它的过去也好展望它的未来,然后和同类型技术进行比较,结合实际的需求,优胜略汰,接着就是 寻找最合适的工具去做开发了。这个过程可以 看一些视频教程(湿货帮你快速入门)、看一些该技术相关的书籍(干货给你系统的思维,提升理解)、逛一些技术相关的博客论坛(半干半湿的东西会给你最前沿的信息)。

在没有一定的开发经验积累之前,着急地提高深度,折腾什么高大上的用法 是不合时宜的(除非你是站在牛人的肩膀上,人家肯一路指导)。自学是个自我领悟的过程,以实践为基础,提升自我为目的。


参考资料:

@参考: Mongoose学习参考文档——基础篇
@参考: node.js下mongoose简单操作实例

这篇关于【探究】NoSQL数据库学习(二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1039573

相关文章

SQL server数据库如何下载和安装

《SQLserver数据库如何下载和安装》本文指导如何下载安装SQLServer2022评估版及SSMS工具,涵盖安装配置、连接字符串设置、C#连接数据库方法和安全注意事项,如混合验证、参数化查... 目录第一步:打开官网下载对应文件第二步:程序安装配置第三部:安装工具SQL Server Manageme

C#连接SQL server数据库命令的基本步骤

《C#连接SQLserver数据库命令的基本步骤》文章讲解了连接SQLServer数据库的步骤,包括引入命名空间、构建连接字符串、使用SqlConnection和SqlCommand执行SQL操作,... 目录建议配合使用:如何下载和安装SQL server数据库-CSDN博客1. 引入必要的命名空间2.

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

MySQL数据库中ENUM的用法是什么详解

《MySQL数据库中ENUM的用法是什么详解》ENUM是一个字符串对象,用于指定一组预定义的值,并可在创建表时使用,下面:本文主要介绍MySQL数据库中ENUM的用法是什么的相关资料,文中通过代码... 目录mysql 中 ENUM 的用法一、ENUM 的定义与语法二、ENUM 的特点三、ENUM 的用法1

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

嵌入式数据库SQLite 3配置使用讲解

《嵌入式数据库SQLite3配置使用讲解》本文强调嵌入式项目中SQLite3数据库的重要性,因其零配置、轻量级、跨平台及事务处理特性,可保障数据溯源与责任明确,详细讲解安装配置、基础语法及SQLit... 目录0、惨痛教训1、SQLite3环境配置(1)、下载安装SQLite库(2)、解压下载的文件(3)、

MySQL数据库的内嵌函数和联合查询实例代码

《MySQL数据库的内嵌函数和联合查询实例代码》联合查询是一种将多个查询结果组合在一起的方法,通常使用UNION、UNIONALL、INTERSECT和EXCEPT关键字,下面:本文主要介绍MyS... 目录一.数据库的内嵌函数1.1聚合函数COUNT([DISTINCT] expr)SUM([DISTIN

MySQL追踪数据库表更新操作来源的全面指南

《MySQL追踪数据库表更新操作来源的全面指南》本文将以一个具体问题为例,如何监测哪个IP来源对数据库表statistics_test进行了UPDATE操作,文内探讨了多种方法,并提供了详细的代码... 目录引言1. 为什么需要监控数据库更新操作2. 方法1:启用数据库审计日志(1)mysql/mariad

postgresql数据库基本操作及命令详解

《postgresql数据库基本操作及命令详解》本文介绍了PostgreSQL数据库的基础操作,包括连接、创建、查看数据库,表的增删改查、索引管理、备份恢复及退出命令,适用于数据库管理和开发实践,感兴... 目录1. 连接 PostgreSQL 数据库2. 创建数据库3. 查看当前数据库4. 查看所有数据库