亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

mongodb使用總結(jié)

harryhappy / 3780人閱讀

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

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

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

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

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

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

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

我們的老牌數(shù)據(jù)庫(kù),都無一例外的使用SQL語(yǔ)言,管理數(shù)據(jù)庫(kù)。
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ù)庫(kù)不能自己玩兒,要給向PHP、.net、jsp等語(yǔ)言提供接口

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

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

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

NoSQL

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

文檔就是JSON

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

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

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

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

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

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

有豐富的查詢指令

支持索引

具有分片系統(tǒng)

無模式

mongodb的缺點(diǎn)

占用的空間比較大

不支持事務(wù)

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

mongodb常用指令

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

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

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

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

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

db.help() 獲取查詢幫助

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

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

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

db.getCollectionNames() 查詢所有集合

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

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

db.printCollectionStats() 打印當(dāng)前數(shù)據(jù)庫(kù)中所有集合的狀態(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)(這里涉及到幾個(gè)特殊屬性$inc$set 前者為相加后者為設(shè)置)

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

對(duì)數(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ù)組,下一個(gè)函數(shù)總會(huì)繼承上一個(gè)函數(shù)的返回值;callback:回調(diào)函數(shù))

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

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

//查找數(shù)據(jù),找到所有數(shù)據(jù)。args是個(gè)對(duì)象{"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ù)個(gè)數(shù),必須是3個(gè),或者4個(gè)。");
        return;
    }

    //連接數(shù)據(jù)庫(kù),連接之后查找所有
    _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ù)庫(kù)
                return;
            }
            if (doc != null) {
                result.push(doc);   //放入結(jié)果數(shù)組
            } else {
                //遍歷結(jié)束,沒有更多的文檔了
                callback(null, result);
                db.close(); //關(guān)閉數(shù)據(jù)庫(kù)
            }
        });
    });
}

//刪除
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ù)庫(kù)
            }
        );
    });
}

//修改
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();
        });
    })
}
項(xiàng)目中使用mongodb
切換到指定項(xiàng)目 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ù)庫(kù)
var db = new Mongodb.Db("cloud",server,{safe:true})
//連接數(shù)據(jù)庫(kù)
db.open((err,db) => {
    if(err) {
        console.log("連接數(shù)據(jù)庫(kù)失敗")
    } else {
        console.log("連接數(shù)據(jù)庫(kù)成功")
    }
})

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/19417.html

相關(guān)文章

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

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

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

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

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

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

    tangr206 評(píng)論0 收藏0
  • MongoDB第一發(fā):簡(jiǎn)介,CRUD,設(shè)計(jì)。(上)

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

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

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

    MarvinZhang 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<