1. 程式人生 > >Node.js學習筆記(六)Mongoose的使用

Node.js學習筆記(六)Mongoose的使用

Mongoose的使用

文章目錄

1. 什麼是Mongoose

Mongoose是用來簡化MongoDB資料庫操作的,在node.js非同步環境下對MongoDB進行便捷操作的物件模型工具。

2. Mongoose開始

  • 安裝
npm install mongoose
  • mongoose HelloWorld

例子:

var mongoose = require('mongoose');

var db = mongoose.connection;
//連線失敗
db.on('error', console.error.bind(console, 'connection error:'));
//連線成功
db.once('open', function() {
  console.log("connection success...")
; }); //建立連線 mongoose.connect('mongodb://localhost/test'); var kittySchema = new mongoose.Schema({ name: String }); // var Kitten = mongoose.model('Kitten', kittySchema); var silence = new Kitten({ name: 'Silence' }); //儲存 silence.save(function (err) { if(!err){ console.log("save success..."); }
}) //查詢name=Silence // Kitten.find({name:'Silence'},function (err,docs) { // if(!err){ // console.log(JSON.stringify(docs)); // } // })

3. Mongoose 操作 MongoDB

3.1 建立連線

var mongoose = require('mongoose');

var db = mongoose.connection;
//連線失敗
db.on('error', console.error.bind(console, 'connection error:'));
//連線成功
db.once('open', function() {
  console.log("connection success...");
});
//建立連線
mongoose.connect('mongodb://localhost/test');

3.2 定義文件規則 Schema

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

  var blogSchema = new Schema({
    title:  String,
    author: String,
    body:   String,
    comments: [{ body: String, date: Date }],
    date: { type: Date, default: Date.now },
    hidden: Boolean,
    meta: {
      votes: Number,
      favs:  Number
    }
  });
  • schema型別

官方文件:https://mongoosejs.com/docs/schematypes.html

型別 功能
String 字串
Number 數字
Date 日期
Buffer 二進位制
Boolean 布林值
Mixed 混合
ObjectId 物件ID
Array 陣列
Decimal128 Decimal128
Map map集合

例子:

var schema3 = new Schema({
  test: {
    type: String,
    lowercase: true, // 總是將test的值轉化為小寫
    uppercase: true, // 總是將test的值轉化為大寫
    required:true, //設定是否必填
    default:'star', //設定預設值
    index:true, //設定索引值
    unique:true, //索引值唯一
    sparse:true, //是否啟用稀疏索引
    match:RegExp, //判斷是否通過正則驗證
    enum:Array, //判斷test值是否包含於enmu對應的陣列中
    min:Number, //判斷對應值是否大於等於給定值
    max:Number, //判斷對應值是否小於等於給定值
    trim:true //去除資料前後的空格
    capped:1024 //限定大小最大為1024位元組
    validate:function,為此屬性新增一個驗證器函式,如demo1所示
    getfunction//為這個屬性定義一個定製的getter Object.defineProperty()。如demo2所示
    setfunction//定義此屬性的自定義設定Object.defineProperty()。如demo2所示
  }
});
--------------------- 
作者:StevenDIY 
來源:CSDN 
原文:https://blog.csdn.net/momDIY/article/details/76285369 
版權宣告:本文為博主原創文章,轉載請附上博文連結!

官方例子:

var schema = new Schema({
  name:    String,
  binary:  Buffer,
  living:  Boolean,
  updated: { type: Date, default: Date.now },
  age:     { type: Number, min: 18, max: 65 },
  mixed:   Schema.Types.Mixed,
  _someId: Schema.Types.ObjectId,
  decimal: Schema.Types.Decimal128,
  array: [],
  ofString: [String],
  ofNumber: [Number],
  ofDates: [Date],
  ofBuffer: [Buffer],
  ofBoolean: [Boolean],
  ofMixed: [Schema.Types.Mixed],
  ofObjectId: [Schema.Types.ObjectId],
  ofArrays: [[]],
  ofArrayOfNumbers: [[Number]],
  nested: {
    stuff: { type: String, lowercase: true, trim: true }
  },
  map: Map,
  mapOfString: {
    type: Map,
    of: String
  }
})

// example use

var Thing = mongoose.model('Thing', schema);

var m = new Thing;
m.name = 'Statue of Liberty';
m.age = 125;
m.updated = new Date;
m.binary = Buffer.alloc(0);
m.living = false;
m.mixed = { any: { thing: 'i want' } };
m.markModified('mixed');
m._someId = new mongoose.Types.ObjectId;
m.array.push(1);
m.ofString.push("strings!");
m.ofNumber.unshift(1,2,3,4);
m.ofDates.addToSet(new Date);
m.ofBuffer.pop();
m.ofMixed = [1, [], 'three', { four: 5 }];
m.nested.stuff = 'good';
m.map = new Map([['key', 'value']]);
m.save(callback);

3.3 建立模型

schema:mongoose資料表儲存的模型

//定義資料模型
var User = mongoose.model('User', user);

3.4 CURD

官方文件:https://mongoosejs.com/docs/api.html#Model

3.4.1 增加

var mongoose = require("mongoose")

//監聽連線
var db = mongoose.connection;
//連線失敗
db.on('error', console.error.bind(console, 'connection error:'));
//連線成功
db.once('open', function() {
  console.log("connection success...");
});

//建立連線
mongoose.connect('mongodb://localhost/test')

//定義文件規則
var user = new mongoose.Schema({
  name: String,
  age: Number,
  time:{
    type: Date,
    default: Date.now
  }
});

//定義資料模型
var User = mongoose.model('User', user);

//儲存50人
for(i=0;i<50;i++){
  var user = new User({
    name: "zhangsan" + i,
    age: 5 + i,
  });
  user.save(function (err) {
    if(!err){
      console.log("save success...");
    }
  })
}

3.4.2 修改

User.update({_id: '5bdbc1bef86c720764055f06'}, { $set: { age: 100 }},function (err,tank) {
  console.log(tank);
})

3.4.3 刪除

User.deleteMany({_id: '5bdbc1bef86c720764055f06'},function (err) {
  console.log("delete success...");
})
Kitten.remove({
  name: 'Silence2'
},function (err,ret) {
  if(err){
    console.log(err);
  }else{
    console.log(ret);
  }
})

3.4.4 查詢

User.find({_id: '5bdbc1bef86c720764055f06'},function (err,data) {
  console.log(data);
})
//查詢所有,並按照時間排序
User.find({}).sort({time : 'desc'}).exec(function (err,data) {
  console.log(data);
})

3.4.5 完整例子

var mongoose = require("mongoose")

//監聽連線
var db = mongoose.connection;
//連線失敗
db.on('error', console.error.bind(console, 'connection error:'));
//連線成功
db.once('open', function() {
  console.log("connection success...");
});

//建立連線
mongoose.connect('mongodb://localhost/test')

//定義文件規則
var user = new mongoose.Schema({
  name: String,
  age: Number,
  time:{
    type: Date,
    default: Date.now
  }
});

//定義資料模型
var User = mongoose.model('User', user);

//儲存50人
// for(i=0;i<50;i++){
//   var user = new User({
//     name: "zhangsan" + i,
//     age: 5 + i,
//   });
//   user.save(function (err) {
//     if(!err){
//       console.log("save success...");
//     }
//   })
// }

//查詢
// User.find({_id: '5bdbc1bef86c720764055f06'},function (err,data) {
//   console.log(data);
// })


//修改
// User.update({_id: '5bdbc1bef86c720764055f06'}, { $set: { age: 100 }},function (err,tank) {
//   console.log(tank);
// })

//刪除
// User.deleteMany({_id: '5bdbc1bef86c720764055f06'},function (err) {
//   console.log("delete success...");
// })