[Node.js 学习]之三:使用数据库

[Node.js 学习]之三:使用数据库

深入学习:

  1. [Node.js 学习]之一:安装node
  2. [Node.js学习]之二:为什么要使用Node.js
  3. [[Node.js学习]之三:使用数据库

前言

​ 首先是结构化数据,根据定义结构化数据指的是由表结构来表现的数据,相同的行或者列的属性是相同的。因此我们大学的学习的关系型数据库很适用于这类。

​ 非结构化数据,指的是数据结构不规则或不完整,没有任何预定义的数据模型,不方便用二维逻辑表来表现的数据,例如办公文档(Word)、文本、图片、HTML、各类报表、视频音频等。

​ 介于两者中间的比较常见的表现:xml和json

​ 为了解决关系数据库的弱点,就出现了NoSQL数据库(具体内容参考,参考文章:https://mp.weixin.qq.com/s/1RjH8MBttLlH39-cWUT0pQ)

MongoDB

是一种开源,高性能的NoSQL数据库,主要是基于分布式文件存储;支持索引、集群、复制和故障转移、各种语言的驱动程序,官网:http://www.mongodb.org/API Docs:http://docs.mongodb.org/manual/

​ 语言是Node.js,使用了Mongoose对MongoDB操作。Mongoose 是在nodejs环境下,对mongodb进行便捷操作的对象模型工具。官网:

1、安装并启动
(1) [Node.js 学习]之一 安装node https://blog.csdn.net/no_alternantive/article/details/97921729
(2) mongoDB并启动mongoDB服务
(3)npm install mongoose

2、初使用
API参考:Node.js/mongoose/index.d.ts,其中mongoose.Schema在index.d.ts定义是node.js事件 的 EventEmitter
也可以看官网的schema.js文档

 /*
   * section schema.js
   * http://mongoosejs.com/docs/api.html#schema-js
   */
class Schema extends events.EventEmitter {
	....
}

​ 连接:connect

connectDB() {
        let db_url = "mongodb://user:pass@localhost:port/database"
        mongoose.connect(db_url);
        mongoose.connection.on('connected', function () {
            console.log('connection open to ' + db_url);
        });
        mongoose.connection.on('error', function (err) {
            console.log('connection error: ' + err);
        });
        mongoose.connection.on('disconnected', function () {
            console.log('connection disconnected');
        });

    }

2、Schema

其实Schema映射的是 mongoDB 的 collection (相当于 SQL table),并且定义其结构。

let manSchema = new Schema({
     name: String,
     sex: Number,
});

model 是从 Schema 中定义的一种多样化的构造函数,model 的实例可以使用很多操作,所有文档的creat 和 index 都是由 model 来处理

let manModel = dbHelper.model('Man', manSchema);

然后再实例化当前model,对某data操作

var man = new Man({
	name:  'Rose' ,
    id: 1
});

2.1 保存数据

let conditions: any = {name: name};
manModel.save(function (err, args) {
	if (err) return handleError(err);
	console.log(args);
});
//or
manModel.create (conditions, function(err, args) { 
    if (err) return console.log(err);
    console.log(args);
});
//或者可以使用 insertMany / insertOne

2.2 修改

let conditions: any = {{id: 1}, { name: 'Tom' }};
manModel.updateOne(conditions, unction(err, args) {
	if(err) return handleError(err);
	console.log(args);
});
// update / updateMany
// findOneAndUpdate 查找出相应的数据,修改,并返还给程序

2.3 查找

let conditions: any = {id: 1};
manModel.findOne(conditions, function(err, args){ 
    if(err) return handleError(err);
    console.log(args);
});
// find

2.4 删除

// deleteOne只删掉符合项的第一条 或者 deleteMany 删所有符合条件
manModel.deleteOne({ id: 1 }, function (err, args) {
	if (err) return handleError(err);
	console.log(args);
});

题外:删除某Array数组的某下标指向的数据

/** 根据下标删除某个多元素(object)的数组
 * @author deng
 * @param arr 要删除的数组
 * @param dx 要删除的下标
 * @returns arr 删除后的数组
 */
export function removeArr(arr:Array<any>, dx:number) {
    if (isNaN(dx) || dx > arr.length)
        return arr;
    for (var i = 0, n = 0; i < arr.length; i++) {
        if (arr[i] != arr[dx]) {
                arr[n++] = arr[i];
        }
    }
    arr[arr.length - 1] = undefined;
    arr.length -= 1;
    return arr;
}

3、问题
定义 Array 之后

var Empty2 = new Schema({
	"data": {type: Array},
});

MongoDB版本没有更新之前data会出现undefined,版本更新之后就是[]
如果需要一开始定义是undefined,定义的时候

"data": {type:Array, default:undefined}, 

参考文章:https://mongoosejs.com/docs/schematypes.html,内容如下:官网文档
定义 Object之后也有类似的事情

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值