如何使用 Node.js 来连接 MongoDB,并对数据库进行增删查改操作
要在 MongoDB 中创建一个数据库,首先我们需要创建一个 MongoClient 对象,然后配置好指定的 URL 和 端口号。
如果数据库不存在,MongoDB 将创建数据库并建立连接。
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/runoob";
MongoClient.connect(url, { useNewUrlParser: true }, function(err, db) {
if (err) throw err;
console.log("数据库已创建!");
db.close();
});
创建集合
var dbase = db.db("runoob");
dbase.createCollection('site', function (err, res) {
if (err) throw err;
console.log("创建集合!");
db.close();
});
数据库操作( CURD )
插入一条: inserOne, 插入多条数据可以使用 insertMany()
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
MongoClient.connect(url, { useNewUrlParser: true }, function(err, db) {
if (err) throw err;
var dbo = db.db("runoob");
var myobj = { name: "菜鸟教程", url: "www.runoob" };
dbo.collection("site").insertOne(myobj, function(err, res) {
if (err) throw err;
console.log("文档插入成功");
db.close();
});
});
查询全部 find({})
const findDocuments = function(db, callback) {
// Get the documents collection
const collection = db.collection('documents');
// Find some documents
collection.find({'a': 3}).toArray(function(err, docs) {
assert.equal(err, null);
console.log("Found the following records");
console.log(docs);
callback(docs);
});
}
查询指定
更新数据: updateOne(), 更新多条数据: updateMany()
var whereStr = {"name":'菜鸟教程'}; // 查询条件
var updateStr = {$set: { "url" : "https://www.runoob.com" }};//更新条件
dbo.collection("site").updateOne(whereStr, updateStr, function(err, res) {
if (err) throw err;
console.log("文档更新成功");
db.close();
});
删除数据
删除一条: deleteOne() 先查询后删除;删除多条 deleteMany()
var whereStr = {"name":'菜鸟教程'}; // 查询条件
dbo.collection("site").deleteOne(whereStr, function(err, obj) {
if (err) throw err;
console.log("文档删除成功");
db.close();
});
排序
排序 使用 sort() 方法,该方法接受一个参数,规定是升序(1)还是降序(-1)。
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
MongoClient.connect(url, { useNewUrlParser: true }, function(err, db) {
if (err) throw err;
var dbo = db.db("runoob");
var mysort = { type: 1 };
dbo.collection("site").find().sort(mysort).toArray(function(err, result) {
if (err) throw err;
console.log(result);
db.close();
});
});
删除集合 drop()
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
MongoClient.connect(url, { useNewUrlParser: true }, function(err, db) {
if (err) throw err;
var dbo = db.db("runoob");
// 删除 test 集合
dbo.collection("test").drop(function(err, delOK) { // 执行成功 delOK 返回 true,否则返回 false
if (err) throw err;
if (delOK) console.log("集合已删除");
db.close();
});
});
LH Mongo-Node.js Notes:
assert 模块是Node的内置模块,主要用于断言。如果表达式不符合预期,就抛出一个错误。
const MongoClient = require('mongodb').MongoClient;
const assert = require('assert')
var express = require('express')
var router = express.Router()
const url = 'mongodb://localhost:27017'
const dbName = 'hiphop' //database name
// connect to server
MongoClient.connect(url, function(err, client){
assert.equal(null,err);
const db = client.db(dbName)
const collection = db.collection('lyrics')
router.get('/new',function(req,res,next){
res.render('lyric_new')
});
router.post('/',function(req, res, next){
res.redirect('/')
})
router.get('/:id',function(req, res, next){
collection.findOne({"genius_id":parseInt(req.params.id)},function(err, doc){
const song = {
title: doc.title,
lyrics: doc.text,
id: doc.genius_id
}
let templateVars = {
id: req.params.id,
title: song.title,
lyrics: song.lyrics
}
res.render('lyric',templateVars)
})
})
router.get('/:id/edit',function(req, res, next){
collection.find ({"genius_id": parseInt(req.params.id)}, function(err,doc){
const song = {
title: doc.title,
lyrics: doc.text,
id: doc.genius_id
}
let templateVars = {
id: req.params.id,
title: song.title,
lyrics: song.lyrics
}
res.render('lyric_edit',templateVars)
})
})
router.post('/:id/edit', function(req, res, next){
collection.updateOne({"genius_id": parseInt(req.params.id)},
{$set: {
text: req.body.edited_lyric
}}, function(err, result){
res.redirect(`/lyrics/${req.params.id}`)
})
})
router.post('/:id/delete', function(req, res, next){
res.redirect('/')
})
})