国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

mongoose 的那些基礎(chǔ)操作

lewif / 2214人閱讀

摘要:連接鏈接錯誤結(jié)構(gòu)匿名用戶的添加實例方法實例上使用的方法添加靜態(tài)方法,靜態(tài)方法在層就能使用增加記錄基于操作關(guān)閉數(shù)據(jù)庫鏈接增加記錄基于操作關(guān)閉數(shù)據(jù)庫鏈接修改記錄關(guān)閉數(shù)據(jù)庫鏈接返回數(shù)據(jù)處理條數(shù)返回處理后的數(shù)據(jù)簡單來說,你需要獲取數(shù)據(jù)就用,只需要修

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 結(jié)構(gòu)
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 靜態(tài)方法,靜態(tài)方法在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!");
    }
    // 關(guān)閉數(shù)據(jù)庫鏈接
    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");
    }
    // 關(guān)閉數(shù)據(jù)庫鏈接
    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!");
    }
    //關(guān)閉數(shù)據(jù)庫鏈接
    db.close();
});

update()返回數(shù)據(jù)處理條數(shù)

findOneAndUpdate()返回處理后的數(shù)據(jù)

簡單來說,你需要獲取數(shù)據(jù)就用findOneAndUpdate(),只需要修改數(shù)據(jù)而不關(guān)注修改后數(shù)據(jù)那就用update()

查詢 基于實例方法的查詢
var mongooseEntity = new mongooseModel({});
mongooseEntity.findbyusername("model_demo_username", function(error, result){
    if(error) {
        console.log(error);
    } else {
        console.log(result);
    }
    //關(guān)閉數(shù)據(jù)庫鏈接
    db.close();
});
基于靜態(tài)方法的查詢
mongooseModel.findbytitle("emtity_demo_title", function(error, result){
    if(error) {
        console.log(error);
    } else {
        console.log(result);
    }
    //關(guān)閉數(shù)據(jù)庫鏈接
    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);
    }
    //關(guān)閉數(shù)據(jù)庫鏈接
    db.close();
});
刪除記錄
var conditions = {username: "emtity_demo_username"};
mongooseModel.remove(conditions, function(error){
    if(error) {
        console.log(error);
    } else {
        console.log("delete ok!");
    }

    //關(guān)閉數(shù)據(jù)庫鏈接
    db.close();
});
修改器和更新器 更新修改器:

$inc 增減修改器,只對數(shù)字有效.下面的實例: 找到 age=22的文檔,修改文檔的age值自增1

Model.update({‘a(chǎn)ge’:22}, {’$inc’:{‘a(chǎn)ge’:1} }  ); 執(zhí)行后: age=23

$set 指定一個鍵的值,這個鍵不存在就創(chuàng)建它.可以是任何MondoDB支持的類型.

Model.update({‘a(chǎn)ge’:22}, {’$set’:{‘a(chǎn)ge’:‘haha’} }  ); 執(zhí)行后: age=‘haha’

$unset 同上取反,刪除一個鍵

Model.update({‘a(chǎn)ge’:22}, {’$unset’:{‘a(chǎn)ge’:‘haha’} }  ); 執(zhí)行后: age鍵不存在
數(shù)組修改器:

$push 給一個鍵push一個數(shù)組成員,鍵不存在會創(chuàng)建

Model.update({‘a(chǎn)ge’:22}, {’$push’:{‘a(chǎn)rray’:10} } ); 執(zhí)行后: 增加一個 array 鍵,類型為數(shù)組, 有一個成員 10

$addToSet 向數(shù)組中添加一個元素,如果存在就不添加

Model.update({‘a(chǎn)ge’:22}, {’$addToSet’:{‘a(chǎn)rray’:10} } ); 執(zhí)行后: array中有10所以不會添加

$each 遍歷數(shù)組, 和 $push 修改器配合可以插入多個值

Model.update({‘a(chǎn)ge’:22}, {’$push’:{‘a(chǎn)rray’:{’$each’: [1,2,3,4,5]}} } ); 執(zhí)行后: array : [10,1,2,3,4,5]

$pop 向數(shù)組中尾部刪除一個元素

Model.update({‘a(chǎn)ge’:22}, {’$pop’:{‘a(chǎn)rray’:1} } ); 執(zhí)行后: array : [10,1,2,3,4] tips: 將1改成-1可以刪除數(shù)組首部元素

$pull 向數(shù)組中刪除指定元素

Model.update({‘a(chǎn)ge’:22}, {’$pull’:{‘a(chǎn)rray’:10} } ); 執(zhí)行后: array : [1,2,3,4] 匹配到array中的10后將其刪除
條件查詢:

$lt 小于

$lte 小于等于

$gt 大于

$gte 大于等于

$ne 不等于

Model.find({“age”:{ “$get”:18 , “$lte”:30 } } ); 查詢 age 大于等于18并小于等于30的文檔

或查詢 OR:

$in 一個鍵對應(yīng)多個值

$nin 同上取反, 一個鍵不對應(yīng)指定值

$or 多個條件匹配, 可以嵌套 $in 使用

$not 同上取反, 查詢與特定模式不匹配的文檔

Model.find({“age”:{ “$in”:[20,21,22.‘haha’]} } ); 查詢 age等于20或21或21或’haha’的文檔
Model.find({"$or" :  [ {‘a(chǎn)ge’:18} , {‘name’:‘xueyou’} ] }); 查詢 age等于18 或 name等于’xueyou’ 的文檔
類型查詢:

null 能匹配自身和不存在的值, 想要匹配鍵的值 為null, 就要通過 $exists條件判定鍵值已經(jīng)存在 $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 } ) 查詢匹配各種大小寫組合
查詢數(shù)組:
Model.find({“array”:10} ); // 查詢 array(數(shù)組類型)鍵中有10的文檔, array : [1,2,3,4,5,10] 會匹配到
Model.find({“array[5]”:10} ); 查詢 array(數(shù)組類型)鍵中下標5對應(yīng)的值是10, array : [1,2,3,4,5,10] 會匹配到

$all 匹配數(shù)組中多個元素

Model.find({“array”:[5,10]} ); 查詢 匹配array數(shù)組中 既有5又有10的文檔

$size 匹配數(shù)組長度

Model.find({“array”:{"$size" : 3} } ); 查詢 匹配array數(shù)組長度為3 的文檔

$slice 查詢子集合返回

Model.find({“array”:{"$slice" : 10} } ); 查詢 匹配array數(shù)組的前10個元素


Model.find({“array”:{"$slice" : [5,10] } } ); 查詢 匹配array數(shù)組的第5個到第10個元素
where

用它可以執(zhí)行任意javacript語句作為查詢的一部分,如果回調(diào)函數(shù)返回 true 文檔就作為結(jié)果的一部分返回

find({"$where":function(){for(var x in this){//這個函數(shù)中的 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) 限制返回結(jié)果的數(shù)量,

skip(3) 跳過前3個文檔,返回其余的

sort( {“username”:1 , “age”:-1 } )

排序 鍵對應(yīng)文檔的鍵名, 值代表排序方向, 1 升序, -1降序
保存數(shù)組json

刪除多條數(shù)據(jù)

Mongoose增刪改查

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/94735.html

相關(guān)文章

  • mongoose 那些基礎(chǔ)操作

    摘要:連接鏈接錯誤結(jié)構(gòu)匿名用戶的添加實例方法實例上使用的方法添加靜態(tài)方法,靜態(tài)方法在層就能使用增加記錄基于操作關(guān)閉數(shù)據(jù)庫鏈接增加記錄基于操作關(guān)閉數(shù)據(jù)庫鏈接修改記錄關(guān)閉數(shù)據(jù)庫鏈接返回數(shù)據(jù)處理條數(shù)返回處理后的數(shù)據(jù)簡單來說,你需要獲取數(shù)據(jù)就用,只需要修 mongoose 連接mongodb var mongoose = require(mongoose); var db = mongo...

    saucxs 評論0 收藏0
  • Node+express+mongoose 基礎(chǔ)筆記

    本篇文章主要介紹mongoose的一些常用api。安裝數(shù)據(jù)庫連接中間件 npm install mongoose -s 進入mongodb安裝目錄,找到bin文件夾執(zhí)行命令 > mongod --dbpath=項目的db路徑 注:每次重新連接之前,需要把 .lock文件刪掉 可以去官網(wǎng)下載mongodb可視化的操作工具,操作數(shù)據(jù)庫 https://robomongo.org/download ...

    xioqua 評論0 收藏0
  • Node+express+mongoose 基礎(chǔ)筆記

    本篇文章主要介紹mongoose的一些常用api。安裝數(shù)據(jù)庫連接中間件 npm install mongoose -s 進入mongodb安裝目錄,找到bin文件夾執(zhí)行命令 > mongod --dbpath=項目的db路徑 注:每次重新連接之前,需要把 .lock文件刪掉 可以去官網(wǎng)下載mongodb可視化的操作工具,操作數(shù)據(jù)庫 https://robomongo.org/download ...

    fizz 評論0 收藏0
  • Nodejs+Express學(xué)習(xí)二(Mongoose基礎(chǔ)了解)

    摘要:學(xué)習(xí)注定少不了與數(shù)據(jù)庫打交道,而和可以說是絕配,這篇主要是簡單介紹這個模塊。通過創(chuàng)建查詢是數(shù)據(jù)庫中運用最多也是最麻煩的地方,這里對解讀的并不完善,僅僅是自己的一點領(lǐng)悟而已。 學(xué)習(xí)Node注定少不了與數(shù)據(jù)庫打交道,而MongoDB和Node可以說是絕配,這篇主要是簡單介紹Mongoose這個模塊。由于本人也是邊學(xué)邊寫的這篇文章,絕對會有新手的味道,請大神看到這里就表往下看了。 名詞介紹稍...

    617035918 評論0 收藏0
  • Nodejs+Express學(xué)習(xí)二(Mongoose基礎(chǔ)了解)

    摘要:學(xué)習(xí)注定少不了與數(shù)據(jù)庫打交道,而和可以說是絕配,這篇主要是簡單介紹這個模塊。通過創(chuàng)建查詢是數(shù)據(jù)庫中運用最多也是最麻煩的地方,這里對解讀的并不完善,僅僅是自己的一點領(lǐng)悟而已。 學(xué)習(xí)Node注定少不了與數(shù)據(jù)庫打交道,而MongoDB和Node可以說是絕配,這篇主要是簡單介紹Mongoose這個模塊。由于本人也是邊學(xué)邊寫的這篇文章,絕對會有新手的味道,請大神看到這里就表往下看了。 名詞介紹稍...

    LiangJ 評論0 收藏0

發(fā)表評論

0條評論

lewif

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<