手记

Nodejs中Mongodb使用

概述

Mongodb是知名的Nosql数据库。在使用Mongodb时,我们不需要额外去学习 SQL语句,而且Mongodb查询出的数据就是Javascript对象,对于前端攻城狮的学习非常友好。在Nodejs应用开发中,我们一般会首选Mongodb作为我们的数据库。下面我们用几个小例子来介绍Mongodb官方提供的Nodejs驱动基本用法。

安装

yarn add mongodb

ps:这里我们不介绍mongodb的安装及使用方法,如果有需要的童鞋可以自行百度~

使用

首先,我们开始连接数据库,mongodb的默认端口是27017。

//db.js
const MongoClient = require("mongodb").MongoClient;
const url = `mongodb://localhost:27017`;
module.exports = {
    db:null,
    open() {
        return new Promise(function(resolve,reject) {
            MongoClient.connect(url,(err,client)=>{
                if(err) {
                    throw new Error(err);
                }
                this.db = client.db('db');
                resolve(this.db);
            })
        })
    },
    close() {
        if(this.db) {
            this.db.close();
        }
    }
}

封装一个dbHelper对象,方便我们在后面使用时快速建立与关闭mongodb链接。下面我们利用dbHelper进行用户信息对查询、保存、更新和删除。
我们新建User类来实现这个功能。

//user.js
const crypto = require('crypto');
const dbHelper = require('./db.js');

class User {

	constructor(user) {
        let pw = crypto.createHash("md5").update(user.password).digest('hex')
        this.name = user.name;
        this.password = pw;
    }
	save() {
        let _user = {name:this.name,password:this.password};
        dbHelper.open().then(db=>{
            let userCollection = db.collection('users');
            userCollection.insertOne(_user,(err,result)=>{
                if(err) throw new Error(err);
                console.log('保存用户成功:'+JSON.stringify(_user));
                dbHelper.close();
            })
        })
	}
	static find(name) {
		return new Promise((resolve,reject)=>{
            dbHelper.open().then(db=>{
                let userCollection = db.collection('users');
                userCollection.findOne({name},(err,result)=>{
                    if(err) throw new Error(err);
                    console.log('找到用户:'+JSON.stringify(result));
                    dbHelper.close();
                    resolve(result);
                })
            })
        })
	}
	static findAll() {
		return new Promise((resolve,reject)=>{
            dbHelper.open().then(db=>{
                let userCollection = db.collection('users');
                userCollection.find({}).toArray((err,result)=>{
                    if(err) throw new Error(err);
                    console.log(`查询用户列表成功:`+JSON.stringify(result));
                    dbHelper.close();
                    resolve(result);
                })
            })
        })
	}
	static update(id,user) {
		dbHelper.open().then(db=>{
            let userCollection = db.collection('users');
            userCollection.updateOne({'_id':ObjectId(id)},{$set:user},(err,result)=>{
                if(err) throw new Error(err);
                dbHelper.close();
                console.log(`更新用户成功:`+user);
            })
        })
	}
	static remove(id) {
		dbHelper.open().then(db=>{
            let userCollection = db.collection('users');
            userCollection.deleteOne({'_id':ObjectId(id)},(err,result)=>{
                if(err) throw new Error(err);
                dbHelper.close();
                console.log(`删除用户成功:`+user);
            })
        })
	}
}

module.exports = User;

现在,我们已经建立了User模型,让我们测试下之前所写的功能是否正常。

//index.js
import User from './user.js'
let user = {
	name:"zhangsan",
	password:'12345'
}
let user = new User(user);
//保存用户
user.save();
//查找所有用户
User.findAll();
//更新用户
User.update('xxxxxxxxx');
//删除用户
User.remove('xxxxxxxxx');

总结

今天就写到这里吧,关于 mongodb 操作还有另外一个更高级的封装mongoose。下次有机会再详细说说mongoose,加油~

1人推荐
随时随地看视频
慕课网APP