MongoDb 初涉

安裝 MongoDB

RDBMS 和 NoSQL

RDBMS,關系數據庫管理系統(Relational Database Management System),常見的有 SQL ServerOracleMySQL 等,其特點為:

  1. 數據以表格的形式出現
  2. 每行為各種記錄名稱
  3. 每列為記錄名稱所對應的數據域
  4. 許多的行和列組成一張表單
  5. 若干的表單組成database

NoSQL,不僅僅是 SQL(Not Only SQL),常見的有 MongoDbRedis 等,通常沒有統一的架構,因為相較于關系型數據庫,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/

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,572評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,071評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,409評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,569評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,360評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,895評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,979評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,123評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,643評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,559評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,742評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,250評論 5 356
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,981評論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,363評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,622評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,354評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,707評論 2 370