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);
})
}
};