1. 程式人生 > >node環境中mongodb的使用

node環境中mongodb的使用

一、mongodb知識點介紹

Mongoose庫簡而言之就是對node環境中MongoDB資料庫操作的封裝,一種物件模型工具,可以將資料庫中的資料轉換為JavaScript物件供我們使用。

Schema(模式)

一種以檔案形式儲存的資料庫模型骨架,不具備資料庫的操作能力,僅僅只是一段程式碼,無法通往資料庫端, 僅僅只是資料庫模型在程式片段中的一種表現。
var BlogSchema = new Schema({
  title:String,
  author:String

});

Model(模型)

Model模型,是經過Schema構造來的,是Schema的編譯版本。一個model的例項直接對映為資料庫中的一個文件。基於這種關係, 以後的增刪改查(CURD)都要通過這個Model實現。

//先建立Schema
var UserSchema = new Schema({
  name:'String',
  sex:'String' 
});
//通過Schema建立Model
var UserModel = mongoose.model('User',UserSchema );

查詢

直接查詢

PersonModel.findOne({'name.last':'dragon'},function(err,person){});

鏈式查詢

這種方式相對直接查詢,分的比較明細,如果不帶callback,則返回query,該query物件執行的方法都將返回自己,只有在執行exec方法時才執行查詢,而且必須有回撥。

Person
  .find({ occupation: /host/ })
  .where('name.last').equals('Ghost')
  .where('age').gt(17).lt(66)
  .where('likes').in(['vaporizing', 'talking'])
  .limit(10)
  .sort('-occupation')
  .select('name occupation')
  .exec(callback);

驗證Validation

資料的儲存是需要驗證的,不是什麼資料都能往資料庫裡丟或者顯示到客戶端的,如果驗證失敗,則會返回err。

1.required 非空驗證

2.min/max 範圍驗證(邊值驗證)

3.enum/match 列舉驗證/匹配驗證

4.validate 自定義驗證規則

var PersonSchema = new Schema({
  name:{
    type:'String',
    required:true //姓名非空
  },
  age:{
    type:'Nunmer',
    min:18,       //年齡最小18
    max:120     //年齡最大120
  },
  city:{
    type:'String',
    enum:['北京','上海']  //只能是北京、上海人
  },
  other:{
    type:'String',
    validate:[validator,err]  //validator是一個驗證函式,err是驗證失敗的錯誤資訊
  }
});

二、mongodb具體使用方法

引入依賴

var mongoose = require("mongoose")
mongoose.connect('mongodb://localhost/testDataBase');

定義schema

這裡我們定義一個userSchema.js檔案

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var UserSchema = new Schema({
  uid: {
      type: String,
    required: true, 
    unique: true
  },
  logLevel: {
    type: String,
    default: 'info'
  },
  meta: {
    createAt: {
      type: Date,
      default: Date.now()
    },
    updateAt: {
      type: Date,
      default: Date.now()
    }
  }
});

UserSchema.pre('save', function (next) {
  if (this.isNew) {
    this.meta.updateAt = this.meta.createAt = Date.now();
  } else {
    this.meta.updateAt = Date.now();
  }
  next()
});
//靜態方法
UserSchema.statics = {
  fetch: function (cb) {
    return this.find({})
      .sort('meta.createAt')
      .exec(cb)
  },
  findById: function (id, cb) {
    return this.findOne({_id: id})
      .sort('meta.createAt')
      .exec(cb);
  },
  findByUid: function (uid, cb) {
    return this.findOne({uid: uid})
      .sort('meta.createAt')
      .exec(cb);
  }
};

module.exports = UserSchema;

將schema釋出為Model

這裡我們定義一個userModule.js檔案。用於引用schema,釋出為model,向外匯出。

var mongoose = require('mongoose');
var UserSchema = require('./userSchema');

var User = mongoose.model('User',UserSchema);

module.exports = User;

增刪改查

在controller層引入這個model,就可以使用之前定義的靜態方法了。這個model還擁有Model.create(),Model.find(),Model.update(),Model.remove()方法,進行基本的CURD操作。下面舉個簡單的例子,實現增刪改查功能。

var _ = require('underscore');
var User = require('../models/user');

module.exports = {
  //  通過例項化model,建立一個model例項
  add: function(req, res, next) {

    var _user = new User(req.body.user);//相當於呼叫了Model.create(req.body)
    _user.save(function (err, user) {
      if (err) {
        //doSomething...
      } else {
        //doSomething...
      }
    })
  },

  delete: function (req, res) {
    var id = req.query._id;
  
    User.remove({_id: id}, function (err) {
      if (err) {
        //doSomething...
      } else {
        //doSomething...
      }
    })
  },
  update: function (req, res) {
   
    var id = req.body.id;
    var userParams = req.body;

    User.findById(id, function (err, user) {
      if (err) {
        //doSomething...
      } else {
        _user = _.extend(user, userParams);
        _user.save(function (err, user) {
          if(err) {
            //doSomething...
          } else {
            //doSomething...
          }
        })
      }
    })
  },
  list: function (req, res) {
    User.fetch(function (err, users) {
      var resultUsers=_.map(users, function(user){
      if (err){
        //doSomething...
      } else {
        //doSomething...
      }
    })
  },
};


本文引自 作者:艾倫先生,連結:https://www.jianshu.com/p/9b20c1e2f373


相關推薦

node環境mongodb的使用

一、mongodb知識點介紹Mongoose庫簡而言之就是對node環境中MongoDB資料庫操作的封裝,一種物件模型工具,可以將資料庫中的資料轉換為JavaScript物件供我們使用。Schema(模式)一種以檔案形式儲存的資料庫模型骨架,不具備資料庫的操作能力,僅僅只是一

1.0-Node環境的javascript

1.什麼是Node.js? node.js就是javascript的伺服器執行環境,可以讓程式設計師使用javascript來實現伺服器的程式設計。 2.Node.js中javascript的組成部分 ECMAScript核心 + 全域性成員 + 核心API模組。

ElasticSearch最佳入門實踐(八)shard & replica 機制梳理以及單 node 環境建立 index

1、shard & replica 機制梳理 (1)index包含多個shard (2)每個shard都是一個最小工作單元,承載部分資料,lucene例項,完整的建立索引和處理請求的能力 (3

10.Elastic Search單node環境建立index

1、shard&replica機制再次梳理 (1)index包含多個shard (2)每個shard都是一個最小工作單元,承載部分資料,lucene例項,完整的建立索引和處理請求的能力 (3)增減節點時,shard會自動在nodes中負載均衡 (4)primary shard和r

win10安裝mongodb及配置 和 mongodb的基本使用(node環境

function ase mov bsp .config 配置 bin 位置 保存數據 mongodb安裝  下載地址: https://www.mongodb.com/download-center 下載後,我們點擊mongodb-win32-x86_64-2008plu

例子:實現最新版本Node.jsExpress+mongodb的登入註冊頁面

由於版本差異巨大且不相容的情況下,作為才開始學習Node.js的菜鳥,書籍上的例子是不能看了,因此仿照著網路大神中的例子自己再歸納總結了一遍,方便自己以後檢視。好記性不如爛筆頭嘛。 這裡主要使用的版本是express4.0+mongodb最新版本以及Bootstrap3.0介面所做。 一

Node.js的互動式執行環境----REPL

       在node.js中,為了使開發者方便測試JavaScript程式碼,提供了一個名為REPL(Read-Eval-Print-Loop)的可互動執行環境.開發者可以在該執行環境中輸入任何JavaScript表示式,當用戶按下回車鍵後,REPL執行環

Node.js + Koa2 +MongoDB 企業級CMS前後端專案實戰-環境搭建 22741487

1.安裝koa並測試 npm install koa --save var koa = require("koa"); var app = new koa(); app.use(async(ctx)=>{ ctx.body = "hello koa2.x

linux+node.js+redis+mongodb+nginx環境的搭建

1、推薦購買阿里雲伺服器,使用Centos7.0的伺服器版本,在建立完全系統並進入之後,第一步是更新伺服器的相關元件    yum -y install gcc gcc-c++ openssl-devel zl

node.js如何使用mongodb資料庫

1 選擇mysql還是mongodb:        如果你的業務通常能知道key,那麼MongoDB是一個好選擇,比如某遊戲的玩家資訊,這是很典型的NoSQL的應用場景。另外一點是mongodb可以

MongoDB實戰-生產環境分片的部署與配置

    在生產環境裡部署分片叢集時,面前會出現很多選擇和挑戰。下面會介紹幾個推薦的拓撲結構。 1.部署拓撲     要執行示例MongoDB分片叢集,你一共要啟動九個程序(每個副本集三個mongod,外加三個配置伺服器)。咋一看,這個數字有點嚇人。一開始使用者會假設在生產環

如何在vscode 配置:TypeScript開發node環境

配置專案 建立package.json 建一個目錄的資料夾,起一個你喜歡的名字。 node專案嘛,當然要先建立一個package.json ? 1 npm init

Node.js環境使用GBK編碼

NodeJS環境中使用GBK編碼 Node預設支援的編碼格式 Node中的Buffer物件支援以下編碼(以6.9.1版本為例):參考API[https://npm.taobao.org/mirrors/node/latest/docs/api/buffer.

在linux oracle 10g/11g x64bit環境,goldengate隨os啟動而自己主動啟動的腳本

內容 rtm 自己 root optimize and cal 背景 ram 在linux。oracle 10g/11g x64bit環境中,goldengate隨os啟動而自己主動啟動的腳本 背景描寫敘述: goldengate安裝於/u01/ggs文件夾下

解決node使用8080端口被占用

查看 alt 結束進程 nbsp 重新 分享 img logs 相同 1、首先按快捷鍵windows+R,在運行框裏輸入cmd,如圖所示,進入黑色界面後,輸入netstat -ano,查看端口。 2、找到8080端口,查看正在運行程序的pid,如圖所示。 3、回到桌面,

轉:【Java並發編程】之八:多線程環境安全使用集合API(含代碼)

控制 and clas ron com lan 創建 pri 基本上 轉載請註明出處:http://blog.csdn.net/ns_code/article/details/17200509 在集合API中,最初設計的Vector和Hashtable是多線程安

生產環境,通過域名映射ip切換工具SwitchHosts

data sts track ack switch driver eve tail blog 項目中,經常需要配置host。將某個域名指向某個ip。手動配置C:\Windows\System32\drivers\etc\hosts,非常不方便。這裏分享一個可以高效切換hos

node.js的http.response.end方法使用說明

-c 方法 net ron blog 分享 函數 客戶端 pan 轉載自:http://m.jb51.net/article/58468.htm 本文介紹了http.response.end的方法說明、語法、接收參數、使用實例和實現源碼,需要的朋友可以參考下 方法

確定當前Python環境的site-packages目錄位置

body 系統 nbsp import 結構 syntax imp bsp sco How to find the site-packages folder in Python? 在Mac OS或者Linux中比較有用,因為這些系統一般都同時安裝了多個版本。尤其是Mac O

node.js零基礎詳細教程(7):node.js操作mongodb,及操作方法的封裝

font 裏的 ges 格式 上進 ins 方法 回調函數 方式 第七章 建議學習時間4小時 課程共10章 學習方式:詳細閱讀,並手動實現相關代碼 學習目標:此教程將教會大家 安裝Node、搭建服務器、express、mysql、mongodb、編寫後臺業務邏輯、編寫接口