MongoDb 初涉

安裝 MongoDB

RDBMS 和 NoSQL

RDBMS,關系數(shù)據(jù)庫管理系統(tǒng)(Relational Database Management System),常見的有 SQL Server、Oracle、MySQL 等,其特點為:

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

NoSQL,不僅僅是 SQL(Not Only SQL),常見的有 MongoDbRedis 等,通常沒有統(tǒng)一的架構,因為相較于關系型數(shù)據(jù)庫,NoSQL 數(shù)據(jù)庫舍棄了部分功能,而且不需要進過 SQL 層的解析,所以性能非常高。不過反過來,關系型數(shù)據(jù)庫可以使用 SQL 語句做到更復雜的功能,所以實際如何抉擇,還是需要根據(jù)業(yè)務實際應用場景來。

基本命令

打開終端,輸入:

$ mongo

進入 MongoDb 終端交互界面,以下為基本命令,可以自行嘗試。如果出現(xiàn) Fail to connect to 127.0.0.1 之類的錯誤,請檢查是否開啟了 mongod 服務,詳見 stackoverflow/failed-to-connect 以及 stackoverflow/failed-to-connect

~> 常用命令

- -
use demo 創(chuàng)建或切換到數(shù)據(jù)庫 demo
show dbs 查看本地所有數(shù)據(jù)庫及大小
db 查看當前數(shù)據(jù)庫名
db.dropDatabase() 刪除當前數(shù)據(jù)庫
db.album.insert({
"title": "MongoDb Demo",
"info": ["mongodb", "json", "nodejs"]
})
插入數(shù)據(jù)( json 對象格式)到 album 集合
show tables 查看當前數(shù)據(jù)庫的所有集合名
db.album.drop() 刪除當前數(shù)據(jù)庫的 album 集合
db.album.find() 查看當前數(shù)據(jù)庫 album 集合的數(shù)據(jù),有 findOne() 函數(shù)表示只返回第一個找到的文檔數(shù)據(jù)
db.album.insertOne({"bilibili":2233}) 向 album 集合插入單條數(shù)據(jù)
db.album.insertMany([{
"puddy":"puddy"
}, {
"buka":"buka"
}])
向 album 集合插入多條數(shù)據(jù)
db.album.update({
"buka": "buka"
}, {$set:
"buka": "comic"
}}, {<upsert:Boolean>, <multi:Boolean>, <writeConcern:String>})
第二行:update的查詢條件

第三、四行:update的對象和一些更新的操作符(如$,$inc...)等

upsert:可選,這個參數(shù)的意思是,如果不存在update的記錄,是否插入為新紀錄,true為插入,默認是false,不插入。

multi:可選,默認是false,只更新找到的第一條記錄,如果這個參數(shù)為true,就把按條件查出來的所有記錄全部更新。

writeConcern:可選,拋出異常的級別。
db.album.save({_id: ObjectId("59df57025858b8a0a0834e64"), "pika": "pika"}) 整個替換此 id 的記錄
db.album.find().pretty() 查看最近一次修改的文檔數(shù)據(jù)
db.album.remove({"pika":"pika"}, <isJustOne:Boolean>, <writeConcern:String>) 前面為查詢條件,isJustOne為 true 或 1 時表示只刪除一個,writeConcern 為拋出異常級別
db.album.find().limit(7) 讀取前 7 條數(shù)據(jù)
db.album.find().skip(2) 跳過前兩條數(shù)據(jù)

~> 操作符

- -
$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/

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容