成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

mongodb使用總結(jié)

harryhappy / 3722人閱讀

摘要:旨在為應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲解決方案??上攵?,大數(shù)據(jù)時代,數(shù)據(jù)庫中有萬條數(shù)據(jù)都算少的。是個怪胎,無法挑戰(zhàn)老牌數(shù)據(jù)庫,但是在大數(shù)據(jù)時代有自己的意義。使用我們自己的模塊,來實現(xiàn)數(shù)據(jù)庫插入。

MongoDB 是一個基于分布式文件存儲的數(shù)據(jù)庫。由 C++ 語言編寫。旨在為 WEB 應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲解決方案。

MongoDB 是一個介于關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫之間的產(chǎn)品,是非關(guān)系數(shù)據(jù)庫當(dāng)中功能最豐富,最像關(guān)系數(shù)據(jù)庫的。是世界上最大的nosql(not only sql)數(shù)據(jù)庫。執(zhí)行mongodb數(shù)據(jù)庫需要mongod環(huán)境和mongo環(huán)境。

數(shù)據(jù)庫 傳統(tǒng)數(shù)據(jù)庫技術(shù)回顧
概念:存儲數(shù)據(jù)的倉庫我們稱為數(shù)據(jù)庫。數(shù)據(jù)庫分為非關(guān)系型數(shù)據(jù)庫和關(guān)系型數(shù)據(jù)庫。關(guān)系型數(shù)據(jù)庫(Oracle,mysql,db2,...)往往以表結(jié)構(gòu)的形式進(jìn)行存儲。存儲數(shù)據(jù)用txt就行了,為什么要有數(shù)據(jù)庫?

理由1:數(shù)據(jù)庫有行、列的概念,數(shù)據(jù)有關(guān)系,數(shù)據(jù)不是散的

老牌數(shù)據(jù)庫,比如MySQL、SQLServer、Oracle、Access。這些數(shù)據(jù)庫,我們管他們叫結(jié)構(gòu)型數(shù)據(jù)庫。為什么?因為每個表中,都有明確的字段、每行記錄,都有這些字段。不能有的行有,有的行沒有。

理由2:數(shù)據(jù)庫能夠提供非常方便的接口,讓增刪改查變得簡單

我們的老牌數(shù)據(jù)庫,都無一例外的使用SQL語言,管理數(shù)據(jù)庫。
SQL就是structure query language
比如,查詢所有女生:

SELECT * FROM users WHERE sex = "女";

再比如,查詢所有女生,并且年齡20~24之間,并且在北京:

SELECT * FROM users WHERE sex = "女" AND age < 24 AND age >= 20 AND address = "北京"

理由3:數(shù)據(jù)庫不能自己玩兒,要給向PHP、.net、jsp等語言提供接口

用PHP這些語言,能夠向數(shù)據(jù)庫中增刪改查。
老牌數(shù)據(jù)庫,都是結(jié)構(gòu)型數(shù)據(jù)庫,現(xiàn)在出了什么問題?
比如,我們現(xiàn)在想往一個已經(jīng)有1000條數(shù)據(jù)的數(shù)據(jù)庫中增加一個字段‘是否為本地常住居民’

之前已經(jīng)存在的數(shù)據(jù),實際上不需要增加這個字段,因為這些用戶已經(jīng)填寫完畢表單了。不需要完善個人信息了。我們的想法是在今后注冊的用戶,需要添加‘是否為本地常住居民’信息。但是,我們剛才說了,所謂的字段,是表的一個結(jié)構(gòu)。所有的行都必須擁有,不能有的行有這個字段,有的行沒有這個字段。
可想而知,大數(shù)據(jù)時代,數(shù)據(jù)庫中有100萬條數(shù)據(jù)都算少的。我們?nèi)绻獎幼侄危馁M(fèi)時間。

非結(jié)構(gòu)型數(shù)據(jù)庫NoSQL應(yīng)運(yùn)而生。
NoSQL是個怪胎,無法挑戰(zhàn)老牌數(shù)據(jù)庫,但是在大數(shù)據(jù)時代有自己的意義。

NoSQL

非結(jié)構(gòu)型數(shù)據(jù)庫。沒有行、列的概念。用JSON來存儲數(shù)據(jù)。
集合就相當(dāng)于‘表’,文檔就相當(dāng)于‘行’

文檔就是JSON

因此,我們總結(jié)NOSQL數(shù)據(jù)庫在以下的這幾種情況下比較適用:1.數(shù)據(jù)模型比較簡單;2.需要靈活性更強(qiáng)的系統(tǒng);3.對數(shù)據(jù)庫性能要求較高;4.不需要高度的數(shù)據(jù)一致性;5.對于給定key,比較容易映射復(fù)雜值的環(huán)境。
NoSQL不是銀彈,沒有資格挑戰(zhàn)老牌數(shù)據(jù)庫,但是在某些特定情況下,還是適合的。
mongodb和mysql的區(qū)別

前者非關(guān)系型數(shù)據(jù)庫,后者是關(guān)系型數(shù)據(jù)庫

mongodb中是以集合的形式來充當(dāng)mysql中的表結(jié)構(gòu)

mongodb中的數(shù)據(jù)是以文檔的形式進(jìn)行存儲

mongodb的特點(diǎn) mongodb的優(yōu)點(diǎn)

面向文檔存儲的數(shù)據(jù)庫(BSON的數(shù)據(jù)格式)

有豐富的查詢指令

支持索引

具有分片系統(tǒng)

無模式

mongodb的缺點(diǎn)

占用的空間比較大

不支持事務(wù)

對于windows來說,它不支持32位的系統(tǒng)

mongodb常用指令

show dbs 查看當(dāng)前所有數(shù)據(jù)庫

use database_name 創(chuàng)建數(shù)據(jù)庫

db 查詢當(dāng)前使用的數(shù)據(jù)庫

db.stats() 查詢當(dāng)前使用的數(shù)據(jù)庫信息

db.dropDatabase() 刪除當(dāng)前數(shù)據(jù)庫

db.help() 獲取查詢幫助

db.database_name.help() 獲取指定數(shù)據(jù)庫查詢幫助

db.collection_name.find() 查詢集合的信息

db.createCollection(coll_name,options) 創(chuàng)建集合

db.getCollectionNames() 查詢所有集合

db.getCollection(coll_name) 查詢某一個特定集合

db.coll_name.drop() 對集合的刪除

db.printCollectionStats() 打印當(dāng)前數(shù)據(jù)庫中所有集合的狀態(tài)

db.coll_name.insert/insertMany/save/insertOne 添加一條/多條數(shù)據(jù)

db.coll_name.update(query,info,con,muti) 修改數(shù)據(jù)(query: 查詢的條件;info: 要更新的信息;con: 給異步操作提供擴(kuò)展;muti: 返回布爾類型 默認(rèn)false)(這里涉及到幾個特殊屬性$inc$set 前者為相加后者為設(shè)置)

db.coll_name.remove(query) 刪除數(shù)據(jù)(query 刪除的條件)

對數(shù)據(jù)的查詢

db.coll_name.find() 查詢所有信息

db.coll_name.find({"age": 18}) 查詢某一條信息

db.coll_name.find({age: {$gt: 22}}) gt大于某一條件

db.coll_name.find({age: {$lt: 22}}) lt小于某一條件

db.coll_name.find({age: {$gte: 22}}) gt大于等于某一條件

db.coll_name.find({age: {$lte: 22}}) lte小于等于某一條件

db.coll_name.find({title: /好/}) 模糊查詢

集合與集合之間的關(guān)聯(lián)

async.waterfall([task],callback) (task:代表執(zhí)行的函數(shù)組,下一個函數(shù)總會繼承上一個函數(shù)的返回值;callback:回調(diào)函數(shù))

coll_name.findAndModify(data,sort,update,callback) (data:查詢的條件;sort:對返回的查詢結(jié)果進(jìn)行排序;update:對查詢的結(jié)果進(jìn)行更新;callback:回調(diào)函數(shù))

mongodb術(shù)語概念
sql術(shù)語/概念 mongodb術(shù)語/概念 解釋/說明
database database 數(shù)據(jù)庫
table collection 數(shù)據(jù)庫表/集合
row document 數(shù)據(jù)記錄行/文檔
column field 數(shù)據(jù)字段/域
index index 索引
table joins 表連接,mongodb不支持
primary key primary key 主鍵,mongodb自動將_id字段設(shè)置為主鍵
mongodb的封裝(DAO)
把常用的增刪改查,都封裝成為module。
開發(fā)DAO:J2EE開發(fā)人員使用數(shù)據(jù)訪問對象(DAO)設(shè)計模式把底層的數(shù)據(jù)訪問邏輯和高層的商務(wù)邏輯分開,實現(xiàn)DAO模式能夠更加專注于編寫數(shù)據(jù)訪問代碼。
使用我們自己的DAO模塊,來實現(xiàn)數(shù)據(jù)庫插入。代碼變得簡單。
//這個模塊里面封裝了所有對數(shù)據(jù)庫的常用操作
var MongoClient = require("mongodb").MongoClient;
var settings = require("../settings.js");
//不管數(shù)據(jù)庫什么操作,都是先連接數(shù)據(jù)庫,所以我們可以把連接數(shù)據(jù)庫
//封裝成為內(nèi)部函數(shù)
function _connectDB(callback) {
    var url = settings.dburl;   //從settings文件中,都數(shù)據(jù)庫地址
    //連接數(shù)據(jù)庫
    MongoClient.connect(url, function (err, db) {
        if (err) {
            callback(err, null);
            return;
        }
        callback(err, db);
    });
}

//插入數(shù)據(jù)
exports.insertOne = function (collectionName, json, callback) {
    _connectDB(function (err, db) {
        db.collection(collectionName).insertOne(json, function (err, result) {
            callback(err, result);
            db.close(); //關(guān)閉數(shù)據(jù)庫
        })
    })
};

//查找數(shù)據(jù),找到所有數(shù)據(jù)。args是個對象{"pageamount":10,"page":10}
exports.find = function (collectionName, json, C, D) {
    var result = [];    //結(jié)果數(shù)組
    if (arguments.length == 3) {
        //那么參數(shù)C就是callback,參數(shù)D沒有傳。
        var callback = C;
        var skipnumber = 0;
        //數(shù)目限制
        var limit = 0;
    } else if (arguments.length == 4) {
        var callback = D;
        var args = C;
        //應(yīng)該省略的條數(shù)
        var skipnumber = args.pageamount * args.page || 0;
        //數(shù)目限制
        var limit = args.pageamount || 0;
        //排序方式
        var sort = args.sort || {};
    } else {
        throw new Error("find函數(shù)的參數(shù)個數(shù),必須是3個,或者4個。");
        return;
    }

    //連接數(shù)據(jù)庫,連接之后查找所有
    _connectDB(function (err, db) {
        var cursor = db.collection(collectionName).find(json).skip(skipnumber).limit(limit).sort(sort);
        cursor.each(function (err, doc) {
            if (err) {
                callback(err, null);
                db.close(); //關(guān)閉數(shù)據(jù)庫
                return;
            }
            if (doc != null) {
                result.push(doc);   //放入結(jié)果數(shù)組
            } else {
                //遍歷結(jié)束,沒有更多的文檔了
                callback(null, result);
                db.close(); //關(guān)閉數(shù)據(jù)庫
            }
        });
    });
}

//刪除
exports.deleteMany = function (collectionName, json, callback) {
    _connectDB(function (err, db) {
        //刪除
        db.collection(collectionName).deleteMany(
            json,
            function (err, results) {
                callback(err, results);
                db.close(); //關(guān)閉數(shù)據(jù)庫
            }
        );
    });
}

//修改
exports.updateMany = function (collectionName, json1, json2, callback) {
    _connectDB(function (err, db) {
        db.collection(collectionName).updateMany(
            json1,
            json2,
            function (err, results) {
                callback(err, results);
                db.close();
            });
    })
}

exports.getAllCount = function (collectionName,callback) {
    _connectDB(function (err, db) {
        db.collection(collectionName).count({}).then(function(count) {
            callback(count);
            db.close();
        });
    })
}
項目中使用mongodb
切換到指定項目 npm init生成package.json
npm install mongodb -g 全局安裝
npm install mongodb --save-dev 局部安裝

mongodb.js

var Mongodb = require("mongodb")
// 連接到mongodb的服務(wù)端口
var server = new Mongodb.Server("localhost",27017,{auto_reconnect:true})
//創(chuàng)建數(shù)據(jù)庫
var db = new Mongodb.Db("cloud",server,{safe:true})
//連接數(shù)據(jù)庫
db.open((err,db) => {
    if(err) {
        console.log("連接數(shù)據(jù)庫失敗")
    } else {
        console.log("連接數(shù)據(jù)庫成功")
    }
})

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

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/19417.html

相關(guān)文章

  • spring-data-mongodb查詢使用的一些總結(jié)

    摘要:踩到許多坑,記錄下一些基于的東西吧首先。王大錘那么查詢的時候,如果要根據(jù)查詢班級怎么辦,的查詢也非常簡單。詳情可以查看官方文檔用法 剛接觸mongodb不久。踩到許多坑,記錄下一些基于spring-data-mongodb的東西吧 首先。應(yīng)該了解下什么情況下使用mongodb,什么情況下用mysql: 業(yè)務(wù)需要事物,使用mysql,因為mongodb不支持事物 數(shù)據(jù)量大,但是數(shù)據(jù)本身...

    jollywing 評論0 收藏0
  • spring-data-mongodb查詢使用的一些總結(jié)

    摘要:踩到許多坑,記錄下一些基于的東西吧首先。王大錘那么查詢的時候,如果要根據(jù)查詢班級怎么辦,的查詢也非常簡單。詳情可以查看官方文檔用法 剛接觸mongodb不久。踩到許多坑,記錄下一些基于spring-data-mongodb的東西吧 首先。應(yīng)該了解下什么情況下使用mongodb,什么情況下用mysql: 業(yè)務(wù)需要事物,使用mysql,因為mongodb不支持事物 數(shù)據(jù)量大,但是數(shù)據(jù)本身...

    FuisonDesign 評論0 收藏0
  • 一些基于React、Vue、Node.js、MongoDB技術(shù)棧的實踐項目

    摘要:利用中間件實現(xiàn)異步請求,實現(xiàn)兩個用戶角色實時通信。目前還未深入了解的一些概念。往后會寫更多的前后臺聯(lián)通的項目。刪除分組會連同組內(nèi)的所有圖片一起刪除。算是對自己上次用寫后臺的一個強(qiáng)化,項目文章在這里。后來一直沒動,前些日子才把后續(xù)的完善。 歡迎訪問我的個人網(wǎng)站:http://www.neroht.com/? 剛學(xué)vue和react時,利用業(yè)余時間寫的關(guān)于這兩個框架的訓(xùn)練,都相對簡單,有的...

    tangr206 評論0 收藏0
  • MongoDB第一發(fā):簡介,CRUD,設(shè)計。(上)

    摘要:學(xué)習(xí)已經(jīng)有三周了,是時候來一發(fā)學(xué)習(xí)總結(jié)啦。相關(guān)簡介是非關(guān)系型的數(shù)據(jù)庫。簡單在于,所有的都由大括號,中括號,以及對構(gòu)成。不同于,它是同步的。 學(xué)習(xí)mongoDB已經(jīng)有三周了,是時候來一發(fā)學(xué)習(xí)總結(jié)啦。以下是個人學(xué)習(xí)心得總結(jié),非官方,可能有紕漏和不準(zhǔn)確之處,歡迎指正。 相關(guān)簡介 1.mongoDB是非關(guān)系型(nosql)的數(shù)據(jù)庫。 2.mongoDB是無模式(schemaless)的數(shù)...

    leo108 評論0 收藏0
  • 我的業(yè)余項目總結(jié)

    摘要:過程中的一些總結(jié)手動編譯安裝手動編譯的擴(kuò)展下使用第二個版本完善功能的版本。過程中的一些總結(jié)使用和搭建自己的機(jī)器人使用服務(wù)監(jiān)控進(jìn)程信息使用輸出內(nèi)容第三個版本重構(gòu)的版本。過程中的一些總結(jié)重新編譯支持 前端使用了Bootstrap模板,跨平臺自適應(yīng)。 1. web頁面 showImg(https://segmentfault.com/img/remote/1460000005819045);...

    MarvinZhang 評論0 收藏0

發(fā)表評論

0條評論

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