Node如何集成MongoDB

Node使用MongoDB分为两种一种是依赖 require(‘mongodb:5.0.1’),另一种是 require(‘mongoose:7.0.0’)

mongodb

async/await

构建 db_util.js

//引用客户端
var MongoClient=require('mongodb').MongoClient;
const url = 'mongodb://127.0.0.1:27017'
//定义客户端的对象
const client = new MongoClient(url)
//定义数据库的获取,连接是异步操作
async function db() {
    await client.connect()
    console.log('Connected successfully to server')
    return client.db('test');
  }
//增加数据
async function insert(collectionname,json){
	//等待对应数据库的连接
    var db=await db();
    //获取对应的集合
    var collection = db.collection(collectionname);
    var res = await collection.find(json).toArray()
    if (res.length) {
      ctx.body = '数据库中已经添加这个对象信息'
    } else {
      var result = await collection.insertOne(json)
      console.log(result)
      return result;
    }
  }
module.exports={
    insert
}

在app.js文件内进行引用

const express = require('express')
const db = require('./db_util')
const app = express()
app.get('/add', function (req, res) {
  res.send(db.insert("user", { name: '王五', age: 23 }))
})

app.listen(3000, () => {
  console.log('服务启动')
})

Callback

构建 db_util.js

var mongodb = require("mongodb");
var MongoClient = mongodb.MongoClient;
var connStr = "mongodb://127.0.0.1:27017/";
const client = new MongoClient(connStr)
//连接数据库
async function _connect(cb) {
    await client.connect();
    cb(client.db('test'));
}
/*********************查找**********************************/
/*查找
* collection:集合
* obj:
*   whereObj:条件,默认是{}
*   sortObj:排序,默认是{}
*   limit:显示提定条数,默认是0
*   skip:跳过指定条数,默认是0*/
function find (collectionname, obj, cb) {
    //如果有条件,将条件赋值给obj.whereObj,没有传条件默认为{}
    obj.whereObj = obj.whereObj || {};
    obj.sortObj = obj.sortObj || {};
    obj.limit = obj.limit || 0;
    obj.skip = obj.skip || 0;
    _connect( async function (db) {
        var collection = db.collection(collectionname);
        var result = await collection.find(obj.whereObj)
            .sort(obj.sortObj)
            .limit(obj.limit)
            .skip(obj.skip)
            .toArray();
        console.log(result);
        cb(false, result);
    })
}
//根据ID来查找记录
function findOneById (collection, id, cb) {
    _connect(async function (db) {
        db.collection(collection).findOne({ _id: mongodb.ObjectId(id) }, function (err, results) {
            cb(err, results);
        });
    });
}
module.exports={
    find,
    findOneById
}

在app.js进行引用

const express = require('express')
const dbcall = require('./hellocall')
const app = express()
app.get('/find', function (req, res) {
	dbcall.find("user", {}, (err, result) => {
	  if (err) {
	    console.log("获取数据失败");
	  } else {
	    res.send(result);
	    console.log(result);
	  }
	})
})

app.listen(3000, () => {
  console.log('服务启动')
})

Promise

参考下面的文章
Node.js集成MongoDB之MongoClient与模块化

mongoose

首先是要建立对应的表的模板,然后进行操作

//1.引入模块,相当于为每一个对象定义一个数据库的增删
const mongoose = require("mongoose");
//2.引入参数
const dbSetting = require("./dbsetting");
//2.连接数据库
mongoose.connect(dbSetting.url + "/" + dbSetting.dbName, { useNewUrlParser: true }, function (err) {
    if (err) {
        console.log("连接数据库失败");
        return;
    }
    console.log("连接数据库成功");
});
//3.创建一个schema,规定集合内数据的结构和类型,创建规则,规则中不设置,不能插入成功;
var carSchema = new mongoose.Schema({
    name: String,
    age: Number,
    sex: String
});
//4.根据规则,创建一个类,相当于数据库中的一个集合
var Car = mongoose.model("cars", carSchema);//集合名为cars
//5.类的静态属性来操作数据库的增删改查
module.exports = {
    //1.增
    //1)插入多条数据:单个数据可以是json对象,多个数据放在数组中;
    insertMany: function (aryjson, callback) {
        Car.insertMany(aryjson, function (err, docs) {
            callback(err, docs);
        })
    },
    //2.删
    //1)删除满足条件的一条数据:
    deleteOne: function (filter, callback) {
        Car.deleteOne(filter, function (err, doc) {
            callback(err, doc);
        })
    },
    //2)删除满足条件的所有数据:
    deleteMany: function (filter, callback) {
        Car.deleteMany(filter, function (err, doc) {
            callback(err, doc);
        })
    },
    //3.改
    //1)修改满足条件的一条数据:
    updateOne: function (filter, updatejson, callback) {
        Car.updateOne(filter, updatejson, function (err, doc) {
            callback(err, doc);
        })
    },
    //2)修改满足条件的多条数据:
    updateMany: function (filter, updatejson, callback) {
        Car.updateMany(filter, updatejson, function (err, doc) {
            callback(err, doc);
        })
    },
    //4.查
    //1)查找,排序,分页
    find: function (filter, sortcur, callback) {
        //sortcur:{"sort":{"age":-1},page,pageamount}
        if (arguments.length === 2) {
            callback = sortcur;
            sortcur = {};
        }
        var sort = sortcur.sort || {};
        var page = Number(sortcur.page) || 0;
        var pageamount = Number(sortcur.pageamount) || 0;
        Car.find(filter, function (err, docs) {
            callback(err, docs);
        }).sort(sort).limit(pageamount).skip(page * pageamount);
    },
    //2)获取满足条件的数据总个数
    count: function (filter, callback) {
        Car.countDocuments(filter, function (err, count) {
            callback(err, count);
        })
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值