var mongoose = require('mongoose'); var db = mongoose.createConnection('mongodb://127.0.0.1:27017/NodeJS'); // 連接錯誤 db.on('error', function(error) { console.log(error); });
var mongooseSchema = new mongoose.Schema({ username : {type : String, default : '匿名用戶'}, title : {type : String}, content : {type : String}, time : {type : Date, default: Date.now}, age : {type : Number} });
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, array: [], ofString: [String], ofNumber: [Number], ofDates: [Date], ofBuffer: [Buffer], ofBoolean: [Boolean], ofMixed: [Schema.Types.Mixed], ofObjectId: [Schema.Types.ObjectId], nested: { stuff: { type: String, lowercase: true, trim: true } } })
mongooseSchema.methods.findbyusername = function(username, callback) { return this.model('mongoose').find({username: username}, callback); }
mongooseSchema.statics.findbytitle = function(title, callback) { return this.model('mongoose').find({title: title}, callback); }
var mongooseModel = db.model('mongoose', mongooseSchema);
var doc = {username : 'emtity_demo_username', title : 'emtity_demo_title', content : 'emtity_demo_content'}; var mongooseEntity = new mongooseModel(doc); mongooseEntity.save(function(error) { if(error) { console.log(error); } else { console.log('saved OK!'); } // 關閉數據庫連接 db.close(); });
var doc = {username : 'model_demo_username', title : 'model_demo_title', content : 'model_demo_content'}; mongooseModel.create(doc, function(error){ if(error) { console.log(error); } else { console.log('save ok'); } // 關閉數據庫連接 db.close(); });
mongooseModel.update(conditions, update, options, callback); var conditions = {username : 'model_demo_username'}; var update = {$set : {age : 27, title : 'model_demo_title_update'}}; var options = {upsert : true}; mongooseModel.update(conditions, update, options, function(error){ if(error) { console.log(error); } else { console.log('update ok!'); } //關閉數據庫連接 db.close(); });
- update()返回數據處理條數
var mongooseEntity = new mongooseModel({}); mongooseEntity.findbyusername('model_demo_username', function(error, result){ if(error) { console.log(error); } else { console.log(result); } //關閉數據庫連接 db.close(); });
mongooseModel.findbytitle('emtity_demo_title', function(error, result){ if(error) { console.log(error); } else { console.log(result); } //關閉數據庫連接 db.close(); });
var criteria = {title : 'emtity_demo_title'}; // 查詢條件 var fields = {title : 1, content : 1, time : 1}; // 待返回的字段 var options = {}; mongooseModel.find(criteria, fields, options, function(error, result){ if(error) { console.log(error); } else { console.log(result); } //關閉數據庫連接 db.close(); });
var conditions = {username: 'emtity_demo_username'}; mongooseModel.remove(conditions, function(error){ if(error) { console.log(error); } else { console.log('delete ok!'); } //關閉數據庫連接 db.close(); });
$inc
增減修改器,只對數字有效.下面的實例: 找到 age=22的文檔,修改文檔的age值自增1Model.update({‘age’:22}, {’$inc’:{‘age’:1} } ); 執行後: age=23
$set
指定一個鍵的值,這個鍵不存在就建立它.能夠是任何MondoDB支持的類型.Model.update({‘age’:22}, {’$set’:{‘age’:‘haha’} } ); 執行後: age=‘haha’
$unset
同上取反,刪除一個鍵Model.update({‘age’:22}, {’$unset’:{‘age’:‘haha’} } ); 執行後: age鍵不存在
$push
給一個鍵push一個數組成員,鍵不存在會建立Model.update({‘age’:22}, {’$push’:{‘array’:10} } ); 執行後: 增長一個 array 鍵,類型爲數組, 有一個成員 10
$addToSet
向數組中添加一個元素,若是存在就不添加Model.update({‘age’:22}, {’$addToSet’:{‘array’:10} } ); 執行後: array中有10因此不會添加
$each
遍歷數組, 和 $push 修改器配合能夠插入多個值Model.update({‘age’:22}, {’$push’:{‘array’:{’$each’: [1,2,3,4,5]}} } ); 執行後: array : [10,1,2,3,4,5]
$pop
向數組中尾部刪除一個元素Model.update({‘age’:22}, {’$pop’:{‘array’:1} } ); 執行後: array : [10,1,2,3,4] tips: 將1改爲-1能夠刪除數組首部元素
$pull
向數組中刪除指定元素Model.update({‘age’:22}, {’$pull’:{‘array’:10} } ); 執行後: array : [1,2,3,4] 匹配到array中的10後將其刪除
$lt
小於$lte
小於等於$gt
大於$gte
大於等於$ne
不等於Model.find({「age」:{ 「$get」:18 , 「$lte」:30 } } ); 查詢 age 大於等於18並小於等於30的文檔
或查詢 OR:java
$in
一個鍵對應多個值$nin
同上取反, 一個鍵不對應指定值$or
多個條件匹配, 能夠嵌套 $in 使用$not
同上取反, 查詢與特定模式不匹配的文檔Model.find({「age」:{ 「$in」:[20,21,22.‘haha’]} } ); 查詢 age等於20或21或21或’haha’的文檔
Model.find({"$or" : [ {‘age’:18} , {‘name’:‘xueyou’} ] }); 查詢 age等於18 或 name等於’xueyou’ 的文檔
null 能匹配自身和不存在的值, 想要匹配鍵的值 爲null, 就要經過 $exists
條件斷定鍵值已經存在 $exists
(表示是否存在的意思)正則表達式
Model.find(「age」 : { 「$in」 : [null] , 「exists」 : true } ); 查詢 age值爲null的文檔
Model.find({name:{$exists:true}},function(error,docs){//查詢全部存在name屬性的文檔});Model.find({telephone:{$exists:false}},function(error,docs){//查詢全部不存在telephone屬性的文檔});
MongoDb 使用 Prel兼容的正則表達式庫來匹配正則表達式mongodb
find( {「name」 : /joe/i } ) 查詢name爲 joe 的文檔, 並忽略大小寫 find( {「name」 : /joe?/i } ) 查詢匹配各類大小寫組合
Model.find({「array」:10} ); // 查詢 array(數組類型)鍵中有10的文檔, array : [1,2,3,4,5,10] 會匹配到
Model.find({「array[5]」:10} ); 查詢 array(數組類型)鍵中下標5對應的值是10, array : [1,2,3,4,5,10] 會匹配到
$all
匹配數組中多個元素Model.find({「array」:[5,10]} ); 查詢 匹配array數組中 既有5又有10的文檔
$size
匹配數組長度Model.find({「array」:{"$size" : 3} } ); 查詢 匹配array數組長度爲3 的文檔
$slice
查詢子集合返回Model.find({「array」:{"$slice" : 10} } ); 查詢 匹配array數組的前10個元素 Model.find({「array」:{"$slice" : [5,10] } } ); 查詢 匹配array數組的第5個到第10個元素
用它能夠執行任意javacript語句做爲查詢的一部分,若是回調函數返回 true 文檔就做爲結果的一部分返回數據庫
find({"$where":function(){for(var x in this){//這個函數中的 this 就是文檔}if(this.x !==null&&this.y !==null){returnthis.x +this.y ===10?true:false;}else{returntrue;}}})
簡化版本json
find( {"$where" : "this.x + this.y === 10" } ) find( {"$where" : " function(){ return this.x + this.y ===10; } " } )
limit(3)
限制返回結果的數量,skip(3)
跳過前3個文檔,返回其他的sort( {「username」:1 , 「age」:-1 } )
排序 鍵對應文檔的鍵名, 值表明排序方向, 1 升序, -1降序