NodeJs连接MongoDB以及操作方法

Caleb ... 2020-07-07
  • Node
  • MongoDB
  • 数据库
大约 2 分钟

提示

因为业务需要,老板就让我搞了一回MongoDB。可真是懵逼树上懵逼果,懵逼树下你和我。本着务实求知的态度,研究了下也算是搞完了。开个香槟庆祝下。

# 准备阶段

# 安装依赖

这里采用的是npm仓库中的 mongodb 包。

npm install mongodb -D
1

# 准备目录

在主目录下创建 db 文件夹。并同时在文件夹中创建 connect.js , index.js

├─ db
│  ├─connect.js
│  └─index.js
├─ app.js
├─ ...
1
2
3
4
5

# 连接数据库

# connect.js


const MongoClient = require("mongodb").MongoClient;

const config = {
    dstHost: '127.0.0.1',
    dstPort: 42351,
}  // 数据库基本信息

var mydbname = "xxxx";  // 数据库名

function connect() {
    return new Promise((resolve, reject) => {
        // mongodb://127.0.0.1:12345/xxxxxx  连接格式
        MongoClient.connect(`mongodb://${config.dstHost}:${config.dstPort}/${mydbname}`, {
            useUnifiedTopology: true,
            maxPoolSize: 10,
            minPoolSize: 2,
            poolSize: 10
        }, function (dbConnectError, database) {
            if (dbConnectError) {
                console.error('连接失败,原因是:', dbConnectError);
                reject(dbConnectError)
            }
            const dbo = database.db(mydbname);
            console.log('连接成功!');
            resolve(dbo)  // 抛出连接实例
        });
    })
}

module.exports = connect
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

# index.js

var connect = require("./connect");

class DB {
    constructor() {
        this.dbo = '';
        // 连接数据库,获取实例对象
        connect().then(res => {
            this.dbo = res
        })
    }
    // 增
    insert(collectionName, data) {
        return new Promise((resolve, reject) => {
            this.dbo.collection(collectionName).insertMany(data, function (error, result) {
                if (error) {
                    reject(error);
                    throw error;
                }
                resolve(result);
            });
        });
    }
    // 查
    read(collectionName, where, fields, projection, sort, limit, skip) {
        return new Promise((resolve, reject) => {
            this.dbo.collection(collectionName).find(where || {}, fields || {}).project(projection || {}).sort(sort || {}).limit(limit || 100).skip(skip || 0).toArray((error, result) => {
                if (error) {
                    reject(error);
                    throw error;
                }
                resolve(result);
            })
        })
    }
    // 改
    update(collectionName, where, data) {
        return new Promise((resolve, reject) => {
            this.dbo.collection(collectionName).updateMany(where, data, function (error, result) {
                if (error) {
                    reject(error);
                    throw error;
                }
                resolve(result);
            });
        });
    }
    // 删
    remove(collectionName, where) {
        return new Promise((resolve, reject) => {
            if (where) {
                this.dbo.collection(collectionName).deleteMany(where, function (error, result) {
                    if (error) {
                        reject(error);
                        throw error;
                    }
                    resolve(result);
                });
            }
        });
    }
    // 总
    count(collectionName) {
        return new Promise((resolve, reject) => {
            try {
                let result = this.dbo.collection(collectionName).countDocuments();
                resolve(result);
            } catch (e) {
                reject(e);
            }
        })
    }
    // 自定义数据库语句
    dbo(callback) {
        return new Promise((resolve, reject) => {
            try {
                let result = null;
                if (typeof callback === "function") {
                    result = callback(this.dbo);
                }
                resolve(result);
            } catch (e) {
                reject(e);
            }
        })
    }
}

module.exports = DB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88

# 使用

在某个逻辑中:

const DB = require("../db");

var db = new DB();

// 简单使用增加方法
async insert(req, res) {
    var body = req.body
    var result = await db.insert('user', [body]);
    res.send({
        code: 200,
        msg: '成功',
        data: result
    })
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

简单方法,仅供参考。

# 完结撒花🎉🎉🎉

打赏