Node.js 连接 MongoDB

如何使用 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('/')
    })
})
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值