EfonMark

一番码客 : 挖掘你关心的亮点。
http://www.efonmark.com

本文目录:

[TOC]

image-20200307223313117

介绍

无论是mysql还是mongodb,传统的与数据库交互的方式都是按照他们提供的API来写代码。它们提供的API往往不是很容易理解,而且难以记忆,如果传错了参数,写错一个符号都要查文档。

ORM(对象关系映射,Object Relational Mapping)框架,允许我们面向对象操作,不需要记忆任何的数据库API,只需要操作对象即可,由框架底层去调用数据库API,这样就大大提高了程序员的开发效率。

不过既然多了一层封装,肯定要损失一点点的性能,可以忽略不计。

在NodeJS中,操作mongodb最好的ORM框架就是mongoose

安装mongoose

1
npm install mongoose --save

如果你本机没有安装nodejs驱动,会自动安装nodejs驱动,因为mongoose依赖nodejs驱动。

文档参考:mongoose官方文档http://mongoosejs.com/docs/index.html

连接数据库

1
'use strict'
2
let User = require('./model/user');
3
let mongoose = require('mongoose');
4
mongoose.connect("mongodb://127.0.0.1/test");
5
6
let db = mongoose.connection;
7
// 监听错误的事件
8
db.on('error', err => {
9
    console.log(err);
10
});
11
12
db.once('open', () => {
13
    console.log('mongodb connect successfully!');
14
    highOrderQuery()
15
});

模型定义

mongoose使用schema来描述数据的格式、字段、规则,有了schema之后可以生成model来操作数据。

一般我们新建一个model目录来存放这些模型文件,比如这里我们新建一个model/user.js

1
'use strict'
2
let mongoose = require('mongoose');
3
let schema = mongoose.Schema({
4
    name: String,
5
    age: Number,
6
    address: String,
7
    fav: [String]
8
}, {
9
    versionKey: false
10
}
11
);
12
13
module.exports = mongoose.model("users", schema);

增删改查

直接查看文档中Model相关API。

1
async function testCRUD() {
2
    //增
3
    let arr = [
4
        {
5
            name: "李连杰", age: 50, address: "北京", fav: ["功夫", "演电影", "旅游"]
6
        },
7
        {
8
            name: "吴京", age: 48, address: "北京", fav: ["功夫", "演电视剧", "运动"]
9
        },
10
    ];
11
    let res = await User.create(arr);
12
    console.log(res);
13
    
14
    //查
15
    let res = await User.findOne({address: "北京"}); //查询出符合条件的第一个文档
16
    console.log(res);
17
    let res = await User.find({address: "北京"}); // 查询出符合条件的所有文档
18
    console.log(res);
19
20
    //改
21
    let res = await User.updateOne({_id: "5b4065e548651d0b7035843d"}, {age: 11, address: "深圳"});
22
    console.log(res);
23
24
    //删
25
    let res = await User.deleteOne({_id: "5b4065e548651d0b7035843d"});
26
    console.log(res);
27
}

高级查询

所有条件操作符:https://docs.mongodb.com/manual/reference/operator/query/

1
async function highOrderQuery() {
2
    //条件查询
3
    let res = await User.find({age: {$gt: 15}});
4
    
5
    //数组查询
6
    let res = await User.find({
7
    	fav: "玩游戏"
8
    });
9
    
10
    //分页查询
11
    // sort({age:1}) : 1(默认)是从小到大,-1是从大到小
12
    // sort("-age") :可以直接写`-`,表示从大到小
13
    // select("")只选择某个或某几个字段;select("-fav")不选某个字段
14
    let res = await User.find().skip(0).limit(2).sort("-age").select("-fav"); 
15
16
    console.log(res);
17
}

参考

一番雾语:操作mongodb最好的NodeJS框架。


免费知识星球:一番码客-积累交流
微信公众号:一番码客
微信:Efon-fighting
网站:http://www.efonmark.com

蜀ICP备19039940号

总访问量为