1. 程式人生 > >mongodb操作指令以及在node.js封裝mongodb的操作方法

mongodb操作指令以及在node.js封裝mongodb的操作方法

1、啟動mongodb:

cd path/mongodb/bin                     // 開啟命令列,切換到mongodb目錄下的bin目錄
mongod --dbpath path/mongodb/data/db    // 設定path/mongodb/data/db目錄為資料庫目錄
mongo.exe 或者 mongo                    // 啟動JavaScript shell,是操作資料庫的命令列

2、mongodb基本命令:

db                                                  // 顯示當前所在資料庫
show dbs                                            // 顯示所有的資料庫
use db                                              // 切換到db資料庫,資料庫不存在則建立新的資料庫  
db.dropDatabase
() // 刪除當前資料庫 db.createCollection(name, options) // 在當前db下建立新的集合 show tables 或 show collections // 顯示當前db下的所有集合名(collection) db.collection.find().pretty() // 查詢當前db下的collection集合下的所有資料,pretty()讓資料更直觀的呈現出來 db.collection
.insert(obj) // 向當前db下的collection集合插入obj資料,若文件不存在,會建立一個新的文件 db.collection.drop() // 刪除當前db下的collection集合 db.collection.update(condition, update, options) // 更新一條資料資料,若options.multi===true,則更新符合條件的所有資料 db.collection.save(obj) // 若obj._id存在,則該文件替換成obj,否則插入obj文件 db.collection
.remove(condition, options) // 刪除符合condition條件的文件,options.justOne===1 || true時,只刪除一條資料

3、mongo許可權設定

// 建立指定許可權的使用者
use admin
db.auth(user, pwd)              // 登入獲得管理員許可權
use test                        // 跳轉到需要建立許可權使用者的資料庫
db.createUser({
    "user" : "testUser",        // 賬號
    "pwd" : "123456",           // 密碼
    "roles" : [                 
                 {
                         "role" : "readWrite",    // 許可權規則
                         "db" : "test"            // 許可權所在的資料庫範圍
                 }
         ]
})

許可權role的具體說明,參考官方文件
4、node.js環境下mongodb的API封裝:

const MongoClient = require('mongodb').MongoClient
const url = 'mongodb://localhost:27017'
const DB = 'test'

function _connectDB (callback) { // { useNewUrlParser: true } 是為了向前相容
    MongoClient.connect(url, { useNewUrlParser: true }, function(err, db) {
        callback(err, db)
    })
}

// 插入一個文件資料
module.exports.insertOne = function (collection, data, callback) {
    _connectDB(function (err, db) {
        if (err) throw err
        var database = db.db(DB)
        database.collection(collection).insertOne(data, function (err, result) {
            callback(err, result)
            db.close()
        })
    })
}
// 插入多個文件資料,傳入的data必須為陣列
module.exports.insert = function (collection, data, callback) {
    _connectDB(function (err, db) {
        if (err) throw err
        let database = db.db(DB)
        if (!(data instanceof Array)) {
            throw new Error('請使用陣列傳入多個數據,或者呼叫Insert新增單個數據')
        }
        if (data.length === 0) {
            throw new Error('禁止插入空陣列')
        } 
        database.collection(collection).insertMany(data, function(err, result) {
            callback(err, result)
            db.close()
        })
    })
}
// 刪除單個數據
module.exports.deleteOne = function (collection, condition, callback) {
    _connectDB(function (err, db) {
        if (err) throw err
        let database = db.db(DB)
        database.collection(collection).deleteOne(condition, function (err, result) {
            callback(err, result)
            db.close()
        })
    })
}
// 刪除多個數據
module.exports.delete = function (collection, condition, callback) {
    _connectDB(function (err, db) {
        if (err) throw err
        let database = db.db(DB)
        database.collection(collection).deleteMany(condition, function (err, result) {
            callback(err, result)
            db.close()
        })
    })
}
// 查詢資料,condition為{}時可以查詢該集合下的所有文件
module.exports.find = function (collection, condition, callback) {
    _connectDB(function (err, db) {
        if (err) throw err
        let database = db.db(DB)
        database.collection(collection).find(condition).toArray(function (err, result) {
            callback(err, result)
            db.close()
        })
    })
}