《數據庫--mongo使用教程》

github地址

目錄

<a id="install"></a>安裝

$ brew install mongodb

<a id="start"></a>啟動本地數據庫

mongod --dbpath="pwd"

<a id="how_use"></a>操作步驟

<a id="mongoose"></a>mongoose(node環境下操作)

  • <a id="connect"></a>連接數據庫

--db.js

var mongoose = require('mongoose'),
    DB_URL = 'mongodb://localhost:27017/mongoosesample';//mongo地址

/**
 * 連接
 */
mongoose.connect(DB_URL);

/**
  * 連接成功
  */
mongoose.connection.on('connected', function () {    
    console.log('Mongoose connection open to ' + DB_URL);  
});    

/**
 * 連接異常
 */
mongoose.connection.on('error',function (err) {    
    console.log('Mongoose connection error: ' + err);  
});    

/**
 * 連接斷開
 */
mongoose.connection.on('disconnected', function () {    
    console.log('Mongoose connection disconnected');  
});    

  • <a id="schema"></a>schema
    • 是mongoose里會用到的一種數據模式,可以理解為表結構的定義;每個schema會映射到mongodb中的一個collection,它不具備操作數據庫的能力,我們先改造一下db.js,導出mongoose對象

--db.js

/**
 * ??
 */
module.exports = mongoose;

--user.js //下面我們定義一個user的Schema,命名為user.js

/**
 * 用戶信息
 */
var mongoose = require('./db.js'),
    Schema = mongoose.Schema;

var UserSchema = new Schema({          
    username : { type: String },                    //用戶賬號
    userpwd: {type: String},                        //密碼
    userage: {type: Number},                        //年齡
    logindate : { type: Date}                       //最近登錄時間
});
/*
定義一個Schema就這么簡單,指定字段名和類型

  Schema Types內置類型如下:

  String  字符串

  Number 數字

  Boolean | Bool   布爾值

  Array 數組

  Buffer buffer字符串

  Date 日期

  ObjectId | Oid 唯一憑證

  Mixed 混合
*/
  • <a id="model"></a>model
    • model是由schema生成的模型,可以對數據庫的操作 我們對上面的定義的user的schema生成一個User的model并導出,修改后代碼如下

--user.js

/**
 * ??
 */
module.exports = mongoose.model('User',UserSchema);

<a id="options"></a>常用數據庫操作--增刪查改

<a id="add"></a>save

  • Model.save([fn])
var UserModel = require("./user.js");

/**
 * 插入
 */
function insert() {

    var userModel = new UserModel({
        username : 'Tracy McGrady',                 //用戶賬號
        userpwd: 'abcd',                            //密碼
        userage: 37,                                //年齡
        logindate : new Date()                      //最近登錄時間
    });

    userModel.save(function (err, res) {

        if (err) {
            console.log("Error:" + err);
        }
        else {
            console.log("Res:" + res);
        }

    });
}

insert();

<a id="update"></a>update

  • Model.update(conditions, update, [options], [callback])//查詢條件,替換數據
var UserModel = require("./user.js");

function update(){
    var wherestr = {'username' : 'Tracy McGrady'};
    var updatestr = {'userpwd': 'zzzz'};

    UserModel.update(wherestr, updatestr, function(err, res){
        if (err) {
            console.log("Error:" + err);
        }
        else {
            console.log("Res:" + res);
        }
    })
}

update();

<a id="find&update"></a>findByIdAndUpdate

  • 常用方法還有findByIdAndUpdate,這種比較有指定性,就是根據_id
  • Model.findByIdAndUpdate(id, [update], [options], [callback])//id 更新數據
  • 其它更新方法
    • Model.findOneAndUpdate([conditions], [update], [options], [callback])      //找到一條記錄并更新
var UserModel = require("./user.js");

function findByIdAndUpdate(){
    var id = '56f2558b2dd74855a345edb2';
    var updatestr = {'userpwd': 'abcd'};

    UserModel.findByIdAndUpdate(id, updatestr, function(err, res){
        if (err) {
            console.log("Error:" + err);
        }
        else {
            console.log("Res:" + res);
        }
    })
}

findByIdAndUpdate();

<a id="delete"></a>刪除

  • Model.remove(conditions, [callback])
  • 其它常用方法還有:
    • Model.findByIdAndRemove(id, [options], [callback])
  • Model.findOneAndRemove(conditions, [options], [callback])
var UserModel = require("./user.js");

function del(){
    var wherestr = {'username' : 'Tracy McGrady'};

    UserModel.remove(wherestr, function(err, res){
        if (err) {
            console.log("Error:" + err);
        }
        else {
            console.log("Res:" + res);
        }
    })
}

del();

<a id="find"></a>條件查詢 已先插入一些測試數據 。。

  • Model.find(conditions, [fields], [options], [callback])
var UserModel = require("./user.js");

function getByConditions(){
    var wherestr = {'username' : 'Tracy McGrady'};//搜索條件
    var opt = {"username": 1 ,"_id": 0};//輸出條件 1是顯示,0是不顯示

    UserModel.find(wherestr, opt ,function(err, res){
        if (err) {
            console.log("Error:" + err);
        }
        else {
            console.log("Res:" + res);
        }
    })
}

getByConditions();

比如我要查詢年齡范圍條件應該怎么寫呢?

User.find({userage: {$gte: 21, $lte: 65}}, callback); //這表示查詢年齡大于等21而且小于等于65歲

其實類似的還有: 

$or    或關系

$nor    或關系取反

$gt    大于

$gte    大于等于

$lt     小于

$lte     小于等于

$ne            不等于

$in             在多個值范圍內

$nin           不在多個值范圍內

$all            匹配數組中多個值

$regex  正則,用于模糊查詢

$size   匹配數組大小

$maxDistance  范圍查詢,距離(基于LBS)

$mod     取模運算

$near   鄰域查詢,查詢附近的位置(基于LBS)

$exists    字段是否存在

$elemMatch  匹配內數組內的元素

$within  范圍查詢(基于LBS)

$box    范圍查詢,矩形范圍(基于LBS)

$center       范圍醒詢,圓形范圍(基于LBS)

$centerSphere  范圍查詢,球形范圍(基于LBS)

$slice    查詢字段集合中的元素(比如從第幾個之后,第N到第M個元素)

  

可能還有一些,沒什么印象,大家自行看看api ^_^!  

<a id="count"></a>數量查詢

  • Model.count(conditions, [callback])
var UserModel = require("./user.js");

function getCountByConditions(){
    var wherestr = {};

    UserModel.count(wherestr, function(err, res){
        if (err) {
            console.log("Error:" + err);
        }
        else {
            console.log("Res:" + res);
        }
    })
}
getCountByConditions();

<a id="findById"></a>根據_id查詢

  • Model.findById(id, [fields], [options], [callback])
var UserModel = require("./user.js");

function getById(){
    var id = '56f261fb448779caa359cb73';

    UserModel.findById(id, function(err, res){
        if (err) {
            console.log("Error:" + err);
        }
        else {
            console.log("Res:" + res);
        }
    })
}

getById();

<a id="findInRegex"></a> 模糊查詢(正則匹配查詢)

  • 示例中查詢出所有用戶名中有'm'的名字,且不區分大小寫,模糊查詢比較常用,正則形式匹配,正則方式就是javascript正則,用到的比較多!
var UserModel = require("./user.js");

function getByRegex(){
    var whereStr = {'username':{$regex:/m/i}};//根據正則匹配查詢

    UserModel.find(whereStr, function(err, res){
        if (err) {
            console.log("Error:" + err);
        }
        else {
            console.log("Res:" + res);
        }
    })
}

getByRegex();
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,885評論 6 541
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,312評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,993評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,667評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,410評論 6 411
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,778評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,775評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,955評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,521評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,266評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,468評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,998評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,696評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,095評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,385評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,193評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,431評論 2 378

推薦閱讀更多精彩內容

  • 初學Node.js接觸到MongoDB數據庫,閱讀資料中推薦的都是Mongoose模塊,可以更加方便的對數據庫進行...
    LnEoi閱讀 31,452評論 9 49
  • 參考深入淺出mongoose 連接mongoose mongoose連接數據庫有兩種方式第一種: 第二種: mon...
    bacbcc94613b閱讀 12,351評論 1 27
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,819評論 18 139
  • 你是如何看待職場的?只不過是一個工作而已?打發時間的地方?僅僅為了賺錢?就是一個生存工具? 我不這么認為。職場是我...
    敏姐的思維空間閱讀 244評論 0 1
  • 美女姐,外貌很美,五官端正,會來事,會化妝 熟悉各種品牌護膚品好壞,對于口紅有獨到的見解,會向你推薦口紅,護膚等 ...
    別的其他閱讀 224評論 0 0