安裝 MongoDB
安裝教程:
https://docs.mongodb.com/manual/administration/install-on-linux/-
命令行安裝:
- Ubuntu:
sudo apt install mongodb
- Fedora:
sudo dnf install mongodb
RDBMS 和 NoSQL
RDBMS,關系數據庫管理系統(Relational Database Management System),常見的有 SQL Server、Oracle、MySQL 等,其特點為:
- 數據以表格的形式出現
- 每行為各種記錄名稱
- 每列為記錄名稱所對應的數據域
- 許多的行和列組成一張表單
- 若干的表單組成database
NoSQL,不僅僅是 SQL(Not Only SQL),常見的有 MongoDb、Redis 等,通常沒有統一的架構,因為相較于關系型數據庫,NoSQL 數據庫舍棄了部分功能,而且不需要進過 SQL 層的解析,所以性能非常高。不過反過來,關系型數據庫可以使用 SQL 語句做到更復雜的功能,所以實際如何抉擇,還是需要根據業務實際應用場景來。
基本命令
打開終端,輸入:
$ mongo
進入 MongoDb 終端交互界面,以下為基本命令,可以自行嘗試。如果出現 Fail to connect to 127.0.0.1
之類的錯誤,請檢查是否開啟了 mongod 服務,詳見 stackoverflow/failed-to-connect 以及 stackoverflow/failed-to-connect
~> 常用命令
- | - |
---|---|
use demo | 創建或切換到數據庫 demo |
show dbs | 查看本地所有數據庫及大小 |
db | 查看當前數據庫名 |
db.dropDatabase() | 刪除當前數據庫 |
db.album.insert({ "title": "MongoDb Demo", "info": ["mongodb", "json", "nodejs"] }) |
插入數據( json 對象格式)到 album 集合 |
show tables | 查看當前數據庫的所有集合名 |
db.album.drop() | 刪除當前數據庫的 album 集合 |
db.album.find() | 查看當前數據庫 album 集合的數據,有 findOne() 函數表示只返回第一個找到的文檔數據 |
db.album.insertOne({"bilibili":2233}) | 向 album 集合插入單條數據 |
db.album.insertMany([{ "puddy":"puddy" }, { "buka":"buka" }]) |
向 album 集合插入多條數據 |
db.album.update({ "buka": "buka" }, {$set: "buka": "comic" }}, {<upsert:Boolean>, <multi:Boolean>, <writeConcern:String>}) |
第二行:update的查詢條件 第三、四行:update的對象和一些更新的操作符(如$,$inc...)等 upsert:可選,這個參數的意思是,如果不存在update的記錄,是否插入為新紀錄,true為插入,默認是false,不插入。 multi:可選,默認是false,只更新找到的第一條記錄,如果這個參數為true,就把按條件查出來的所有記錄全部更新。 writeConcern:可選,拋出異常的級別。 |
db.album.save({_id: ObjectId("59df57025858b8a0a0834e64"), "pika": "pika"}) | 整個替換此 id 的記錄 |
db.album.find().pretty() | 查看最近一次修改的文檔數據 |
db.album.remove({"pika":"pika"}, <isJustOne:Boolean>, <writeConcern:String>) | 前面為查詢條件,isJustOne為 true 或 1 時表示只刪除一個,writeConcern 為拋出異常級別 |
db.album.find().limit(7) | 讀取前 7 條數據 |
db.album.find().skip(2) | 跳過前兩條數據 |
~> 操作符
- | - |
---|---|
$gt | 大于 |
$lt | 小于 |
$gte | 大于等于 |
$lte | 小于等于 |
$ne | 不等于 |
$eq | 等于 |
$or | 或 |
$type | 類型 |
Node.js 與 MongoDb
-
先在 Node.js 工程目錄下安裝 MongoDb 的 npm 包
npm install mongodb --save
~> 實例代碼
'use strict';
const MongoClient = require('mongodb').MongoClient;
const assert = require('assert');
// 27017 is the default port to start MongoDb
// use demo
let url = 'mongodb://127.0.0.1:27017/demo';
let MongoDocument = (function () {
return {
insert: function (db, options, callback) {
// db.collection.insert(data)
let collection = db.collection(options.name);
// let dataLength = Object.keys(options.data).length;
let dataLength = options.data.length;
if (dataLength) {
collection.insertMany(options.data, (err, result) => {
assert.equal(null, err);
assert.equal(result.result.n, dataLength);
assert.equal(result.result.ok, dataLength);
callback(err, result);
});
} else {
collection.insertOne(options.data, (err, result) => {
assert.equal(null, err);
assert.equal(result.result.n, dataLength || 1);
assert.equal(result.result.ok, dataLength || 1);
callback(err, result);
});
}
}
};
})();
// Connect Database
MongoClient.connect(url, (err, db) => {
assert(true, err);
console.log('Connected successfully to MongoDb server');
let options = {
name: 'create',
data: {
'title': 'demo',
'info': 'nodejs'
}
};
MongoDocument.insert(db, options, (err, result) => { });
db.close();
});
module.exports = MongoDocument;
node 運行一下,就可以在 MongoDb 的命令行交互界面:
$ mongo
# >
> use demo
# switched to db demo
> db.create.find()
# { "_id" : ObjectId("59e0d768b7a973234c243333"), "title" : "demo" }
More ... Please refer to
MongoDb Node.js API Document: http://mongodb.github.io/node-mongodb-native/