摘要:旨在為應用提供可擴展的高性能數據存儲解決方案。可想而知,大數據時代,數據庫中有萬條數據都算少的。是個怪胎,無法挑戰老牌數據庫,但是在大數據時代有自己的意義。使用我們自己的模塊,來實現數據庫插入。
MongoDB 是一個基于分布式文件存儲的數據庫。由 C++ 語言編寫。旨在為 WEB 應用提供可擴展的高性能數據存儲解決方案。
MongoDB 是一個介于關系數據庫和非關系數據庫之間的產品,是非關系數據庫當中功能最豐富,最像關系數據庫的。是世界上最大的nosql(not only sql)數據庫。執行mongodb數據庫需要mongod環境和mongo環境。
數據庫 傳統數據庫技術回顧概念:存儲數據的倉庫我們稱為數據庫。數據庫分為非關系型數據庫和關系型數據庫。關系型數據庫(Oracle,mysql,db2,...)往往以表結構的形式進行存儲。存儲數據用txt就行了,為什么要有數據庫?
理由1:數據庫有行、列的概念,數據有關系,數據不是散的
老牌數據庫,比如MySQL、SQLServer、Oracle、Access。這些數據庫,我們管他們叫結構型數據庫。為什么?因為每個表中,都有明確的字段、每行記錄,都有這些字段。不能有的行有,有的行沒有。
理由2:數據庫能夠提供非常方便的接口,讓增刪改查變得簡單
我們的老牌數據庫,都無一例外的使用SQL語言,管理數據庫。
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:數據庫不能自己玩兒,要給向PHP、.net、jsp等語言提供接口
用PHP這些語言,能夠向數據庫中增刪改查。
老牌數據庫,都是結構型數據庫,現在出了什么問題?
比如,我們現在想往一個已經有1000條數據的數據庫中增加一個字段‘是否為本地常住居民’
之前已經存在的數據,實際上不需要增加這個字段,因為這些用戶已經填寫完畢表單了。不需要完善個人信息了。我們的想法是在今后注冊的用戶,需要添加‘是否為本地常住居民’信息。但是,我們剛才說了,所謂的字段,是表的一個結構。所有的行都必須擁有,不能有的行有這個字段,有的行沒有這個字段。
可想而知,大數據時代,數據庫中有100萬條數據都算少的。我們如果要動字段,太耗費時間。
非結構型數據庫NoSQL應運而生。
NoSQL是個怪胎,無法挑戰老牌數據庫,但是在大數據時代有自己的意義。
非結構型數據庫。沒有行、列的概念。用JSON來存儲數據。
集合就相當于‘表’,文檔就相當于‘行’
文檔就是JSON
因此,我們總結NOSQL數據庫在以下的這幾種情況下比較適用:1.數據模型比較簡單;2.需要靈活性更強的系統;3.對數據庫性能要求較高;4.不需要高度的數據一致性;5.對于給定key,比較容易映射復雜值的環境。mongodb和mysql的區別
NoSQL不是銀彈,沒有資格挑戰老牌數據庫,但是在某些特定情況下,還是適合的。
前者非關系型數據庫,后者是關系型數據庫
mongodb中是以集合的形式來充當mysql中的表結構
mongodb中的數據是以文檔的形式進行存儲
mongodb的特點 mongodb的優點面向文檔存儲的數據庫(BSON的數據格式)
有豐富的查詢指令
支持索引
具有分片系統
無模式
mongodb的缺點占用的空間比較大
不支持事務
對于windows來說,它不支持32位的系統
mongodb常用指令show dbs 查看當前所有數據庫
use database_name 創建數據庫
db 查詢當前使用的數據庫
db.stats() 查詢當前使用的數據庫信息
db.dropDatabase() 刪除當前數據庫
db.help() 獲取查詢幫助
db.database_name.help() 獲取指定數據庫查詢幫助
db.collection_name.find() 查詢集合的信息
db.createCollection(coll_name,options) 創建集合
db.getCollectionNames() 查詢所有集合
db.getCollection(coll_name) 查詢某一個特定集合
db.coll_name.drop() 對集合的刪除
db.printCollectionStats() 打印當前數據庫中所有集合的狀態
db.coll_name.insert/insertMany/save/insertOne 添加一條/多條數據
db.coll_name.update(query,info,con,muti) 修改數據(query: 查詢的條件;info: 要更新的信息;con: 給異步操作提供擴展;muti: 返回布爾類型 默認false)(這里涉及到幾個特殊屬性$inc和$set 前者為相加后者為設置)
db.coll_name.remove(query) 刪除數據(query 刪除的條件)
對數據的查詢
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: /好/}) 模糊查詢
集合與集合之間的關聯
async.waterfall([task],callback) (task:代表執行的函數組,下一個函數總會繼承上一個函數的返回值;callback:回調函數)
coll_name.findAndModify(data,sort,update,callback) (data:查詢的條件;sort:對返回的查詢結果進行排序;update:對查詢的結果進行更新;callback:回調函數)
mongodb術語概念sql術語/概念 | mongodb術語/概念 | 解釋/說明 |
---|---|---|
database | database | 數據庫 |
table | collection | 數據庫表/集合 |
row | document | 數據記錄行/文檔 |
column | field | 數據字段/域 |
index | index | 索引 |
table joins | 表連接,mongodb不支持 | |
primary key | primary key | 主鍵,mongodb自動將_id字段設置為主鍵 |
把常用的增刪改查,都封裝成為module。
開發DAO:J2EE開發人員使用數據訪問對象(DAO)設計模式把底層的數據訪問邏輯和高層的商務邏輯分開,實現DAO模式能夠更加專注于編寫數據訪問代碼。
使用我們自己的DAO模塊,來實現數據庫插入。代碼變得簡單。
//這個模塊里面封裝了所有對數據庫的常用操作 var MongoClient = require("mongodb").MongoClient; var settings = require("../settings.js"); //不管數據庫什么操作,都是先連接數據庫,所以我們可以把連接數據庫 //封裝成為內部函數 function _connectDB(callback) { var url = settings.dburl; //從settings文件中,都數據庫地址 //連接數據庫 MongoClient.connect(url, function (err, db) { if (err) { callback(err, null); return; } callback(err, db); }); } //插入數據 exports.insertOne = function (collectionName, json, callback) { _connectDB(function (err, db) { db.collection(collectionName).insertOne(json, function (err, result) { callback(err, result); db.close(); //關閉數據庫 }) }) }; //查找數據,找到所有數據。args是個對象{"pageamount":10,"page":10} exports.find = function (collectionName, json, C, D) { var result = []; //結果數組 if (arguments.length == 3) { //那么參數C就是callback,參數D沒有傳。 var callback = C; var skipnumber = 0; //數目限制 var limit = 0; } else if (arguments.length == 4) { var callback = D; var args = C; //應該省略的條數 var skipnumber = args.pageamount * args.page || 0; //數目限制 var limit = args.pageamount || 0; //排序方式 var sort = args.sort || {}; } else { throw new Error("find函數的參數個數,必須是3個,或者4個。"); return; } //連接數據庫,連接之后查找所有 _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(); //關閉數據庫 return; } if (doc != null) { result.push(doc); //放入結果數組 } else { //遍歷結束,沒有更多的文檔了 callback(null, result); db.close(); //關閉數據庫 } }); }); } //刪除 exports.deleteMany = function (collectionName, json, callback) { _connectDB(function (err, db) { //刪除 db.collection(collectionName).deleteMany( json, function (err, results) { callback(err, results); db.close(); //關閉數據庫 } ); }); } //修改 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的服務端口 var server = new Mongodb.Server("localhost",27017,{auto_reconnect:true}) //創建數據庫 var db = new Mongodb.Db("cloud",server,{safe:true}) //連接數據庫 db.open((err,db) => { if(err) { console.log("連接數據庫失敗") } else { console.log("連接數據庫成功") } })
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/19417.html
摘要:踩到許多坑,記錄下一些基于的東西吧首先。王大錘那么查詢的時候,如果要根據查詢班級怎么辦,的查詢也非常簡單。詳情可以查看官方文檔用法 剛接觸mongodb不久。踩到許多坑,記錄下一些基于spring-data-mongodb的東西吧 首先。應該了解下什么情況下使用mongodb,什么情況下用mysql: 業務需要事物,使用mysql,因為mongodb不支持事物 數據量大,但是數據本身...
摘要:踩到許多坑,記錄下一些基于的東西吧首先。王大錘那么查詢的時候,如果要根據查詢班級怎么辦,的查詢也非常簡單。詳情可以查看官方文檔用法 剛接觸mongodb不久。踩到許多坑,記錄下一些基于spring-data-mongodb的東西吧 首先。應該了解下什么情況下使用mongodb,什么情況下用mysql: 業務需要事物,使用mysql,因為mongodb不支持事物 數據量大,但是數據本身...
摘要:利用中間件實現異步請求,實現兩個用戶角色實時通信。目前還未深入了解的一些概念。往后會寫更多的前后臺聯通的項目。刪除分組會連同組內的所有圖片一起刪除。算是對自己上次用寫后臺的一個強化,項目文章在這里。后來一直沒動,前些日子才把后續的完善。 歡迎訪問我的個人網站:http://www.neroht.com/? 剛學vue和react時,利用業余時間寫的關于這兩個框架的訓練,都相對簡單,有的...
摘要:學習已經有三周了,是時候來一發學習總結啦。相關簡介是非關系型的數據庫。簡單在于,所有的都由大括號,中括號,以及對構成。不同于,它是同步的。 學習mongoDB已經有三周了,是時候來一發學習總結啦。以下是個人學習心得總結,非官方,可能有紕漏和不準確之處,歡迎指正。 相關簡介 1.mongoDB是非關系型(nosql)的數據庫。 2.mongoDB是無模式(schemaless)的數...
摘要:過程中的一些總結手動編譯安裝手動編譯的擴展下使用第二個版本完善功能的版本。過程中的一些總結使用和搭建自己的機器人使用服務監控進程信息使用輸出內容第三個版本重構的版本。過程中的一些總結重新編譯支持 前端使用了Bootstrap模板,跨平臺自適應。 1. web頁面 showImg(https://segmentfault.com/img/remote/1460000005819045);...
閱讀 1553·2023-04-26 01:36
閱讀 2719·2021-10-08 10:05
閱讀 2775·2021-08-05 09:57
閱讀 1537·2019-08-30 15:52
閱讀 1193·2019-08-30 14:12
閱讀 1311·2019-08-30 11:17
閱讀 3097·2019-08-29 13:07
閱讀 2415·2019-08-29 12:35