mongoose銜接mongodbvarmongooserequire(mongoose);vardbmongoose.createConnection(mongodb:127.0
mongoose 銜接mongodb
var mOngoose= require('mongoose');
var db = mongoose.createConnection('mongodb://127.0.0.1:27017/NodeJS');
// 鏈接毛病
db.on('error', function(error) {
console.log(error);
});
Schema 構造
var mOngooseSchema= new mongoose.Schema({
username : {type : String, default : '匿名用戶'},
title : {type : String},
content : {type : String},
time : {type : Date, default: Date.now},
age : {type : Number}
});
Schema的types
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 }
}
})
增添 mongoose 實例要領,實例上運用的要領
mongooseSchema.methods.findbyusername = function(username, callback) {
return this.model('mongoose').find({username: username}, callback);
}
增添 mongoose 靜態要領,靜態要領在Model層就能夠運用
mongooseSchema.statics.findbytitle = function(title, callback) {
return this.model('mongoose').find({title: title}, callback);
}
model
var mOngooseModel= db.model('mongoose', mongooseSchema);
增添紀錄 基於 entity 操縱
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();
});
增添紀錄 基於model操縱
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();
});
- findOneAndUpdate()返回處置懲罰后的數據
- 簡樸來講,你須要獵取數據就用findOneAndUpdate(),只須要修正數據而不關注修正後數據那就用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();
});
mongoose find
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值自增1
Model.update({‘age’:22}, {’$inc’:{‘age’:1} } ); 實行后: age=23
-
$set
指定一個鍵的值,這個鍵不存在就建立它.可所以任何MondoDB支撐的範例.
Model.update({‘age’:22}, {’$set’:{‘age’:‘haha’} } ); 實行后: age=‘haha’
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]
Model.update({‘age’:22}, {’$pop’:{‘array’:1} } ); 實行后: array : [10,1,2,3,4] tips: 將1改成-1能夠刪除數組首部元素
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:
-
$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兼容的正則表達式庫來婚配正則表達式
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] 會婚配到
Model.find({“array”:[5,10]} ); 查詢 婚配array數組中 既有5又有10的文檔
Model.find({“array”:{"$size" : 3} } ); 查詢 婚配array數組長度為3 的文檔
Model.find({“array”:{"$slice" : 10} } ); 查詢 婚配array數組的前10個元素
Model.find({“array”:{"$slice" : [5,10] } } ); 查詢 婚配array數組的第5個到第10個元素
where
用它能夠實行恣意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;}}})
簡化版本
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降序
保留數組json
刪除多條數據
Mongoose增編削查