Node.js學習筆記(六)Mongoose的使用
阿新 • • 發佈:2019-01-01
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所示
get:function,//為這個屬性定義一個定製的getter Object.defineProperty()。如demo2所示
set:function,//定義此屬性的自定義設定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...");
// })