摘要:為安裝文件,無(wú)需再配置環(huán)境變量。連接操作有以下包作者并未查到除此之外的包,但不代表沒(méi)有。等于是每個(gè)默認(rèn)配置的主鍵屬性,屬性名為可自己定義一個(gè)來(lái)覆蓋此屬性。需要注意的是,在新版本的文檔中,為。通過(guò)創(chuàng)建限于篇幅,本小節(jié)暫時(shí)寫(xiě)到這里。
我的琴聲嗚咽,我的淚水全無(wú)。我把遠(yuǎn)方的遠(yuǎn)歸還草原。
- 海子《九月》
什么是Mongodb?
就是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫(kù),多的不說(shuō)。
mongodb分了多個(gè)版本,Atlas【云版本】、Community Server【社區(qū)版本】、Enterprise Server【企業(yè)版本】......我選擇了社區(qū)版本安裝,Windows 7/Windows Server 2008 R2。version v3.4.0
下載地址: https://www.mongodb.com/downl...
注意: 右上角紅框可選擇你想要的版本,分別為穩(wěn)定版、早期版、開(kāi)發(fā)板,左上角可選擇對(duì)應(yīng)版本集中的指定版本
可選擇zip/tgz/msi三種資源格式,zip和tgz下載之后解壓到對(duì)應(yīng)目錄,還需配置對(duì)應(yīng)的環(huán)境變量。msi為安裝文件,無(wú)需再配置環(huán)境變量。【本人采用msi,方便】
安裝完成之后,在mongodb目錄下新建文件夾testMongodb打開(kāi)cmd,輸入
mongod --dbpath"D:mongodb estMongodb"
在瀏覽器訪問(wèn)http://localhost:27017/,顯示如下,說(shuō)明你不僅成功安裝了Mongodb還開(kāi)啟了一個(gè)叫testMongodb的數(shù)據(jù)庫(kù)。
總得來(lái)說(shuō),比起mySql,SOLserver用mongodb創(chuàng)建數(shù)據(jù)庫(kù)和啟動(dòng)服務(wù)都簡(jiǎn)單許多。它就像新建了一個(gè)文件夾,在文件夾中分類存放了許多txt文件。你可以隨時(shí)增加或者刪除文件而不需要重啟服務(wù)。
可視化界面工具 RobonmongoRobonmongo是一個(gè)免費(fèi)的輕量級(jí)的mongodb用戶圖形界面(GUI)。
官網(wǎng)下載地址:https://robomongo.org/
右上角Download,會(huì)出現(xiàn)多個(gè)版本。每個(gè)版本都有詳細(xì)的版本說(shuō)明,可選擇一個(gè)你覺(jué)得合適的版本或者直接用最新版。
下載安裝之后,在打開(kāi)mongodb服務(wù)的情況下,輸入mongodb服務(wù)器地址,即可連接到服務(wù)器。
可對(duì)數(shù)據(jù)進(jìn)行你想做的任何操作,操作都很簡(jiǎn)單,這里就略過(guò)了。
Node連接mongodbnode操作mongodb有以下npm包:
mongoose、mongodb、mongoskin、mongojs(作者并未查到除此之外的npm包,但不代表沒(méi)有)。
哪一個(gè)更好?個(gè)人看法僅供參考:
1.mongodb: 官方版,但寫(xiě)起來(lái)太麻煩。 2.mongoskin:簡(jiǎn)單,但是相關(guān)文檔太少,你甚至找不到實(shí)現(xiàn)聯(lián)表查詢的辦法 3.mongojs:比mongodb好一點(diǎn),但是同樣文檔太少讓人極不滿意 4.mongoose:目前最好用的MongoDB ORM,文檔多(有官網(wǎng)),支持聯(lián)表查詢,而且還很規(guī)范
所以我選擇 mongoose。http://mongoosejs.com/
mongoose簡(jiǎn)單搭建本節(jié)只講mongoose的基本概念和最基礎(chǔ)的項(xiàng)目搭建。CRUD(也就是增刪改查)的操作放在下一節(jié)。
簡(jiǎn)單開(kāi)始安裝mongoose只需要install一下就好了
$ npm install mongoose --save
假設(shè)我們已經(jīng)開(kāi)啟了一個(gè)testMongodb的mongodb服務(wù),創(chuàng)建連接:
var mongoose = require("mongoose"); // 引入mongoose模塊 mongoose.connect("mongodb://localhost/testMongodb");// 連接到數(shù)據(jù)庫(kù)服務(wù) var db = mongoose.connection;//connection創(chuàng)建連接的實(shí)例 db.on("error", console.error.bind(console, "connection error:")); // 注冊(cè)連接失敗的事件監(jiān)聽(tīng) db.once("open", function (callback) { // 注冊(cè)連接成功的事件監(jiān)聽(tīng) once只觸發(fā)一次 // yay! });
once方法繼承自EventEmitter,EventEmitter是node事件觸發(fā)與事件監(jiān)聽(tīng)器功能的封裝
到此,testMongodb還是一個(gè)空的數(shù)據(jù)庫(kù),連表都沒(méi)有(為了方便理解collections解釋為表)。
要理解mongoose就要先理解下面三個(gè)名詞:
Schema: 一種以文件形式存儲(chǔ)的數(shù)據(jù)庫(kù)模型骨架,不具備數(shù)據(jù)庫(kù)的操作能力
Model:由Schema發(fā)布生成的模型,具有抽象屬性和行為的數(shù)據(jù)庫(kù)操作對(duì)
Entity:由Model創(chuàng)建的實(shí)體,他的操作也會(huì)影響數(shù)據(jù)庫(kù)
一句話概括:用Schema創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)表骨架,通過(guò)這個(gè)表骨架生成一個(gè)可操作的MOdel,這個(gè)Model可以創(chuàng)建對(duì)應(yīng)的實(shí)體Entity,Entity即一條可操作的數(shù)據(jù),它們都是Object
便于理解可將Schema看做一張?jiān)O(shè)計(jì)圖,MOdel是根據(jù)設(shè)計(jì)圖制造出來(lái)的模具,Entity就是模具做出來(lái)的物體。
Schema定義一個(gè)Schema
var PersonSchema = new mongoose.Schema({ name:String //定義一個(gè)屬性name,類型為String });
Schema.Type
Schema.Type是由Mongoose內(nèi)定的一些數(shù)據(jù)類型,基本數(shù)據(jù)類型都在其中,他也內(nèi)置了一些Mongoose特有的Schema.Type。支持自定義schema.type。
Schema.type有一下常見(jiàn)的類型:
//舉例: var ExampleSchema = new Schema({ name:String, binary:Buffer, //以字節(jié)的形式操作文件 living:Boolean, updated:Date, age:Number, mixed:Schema.Types.Mixed, //該混合類型等同于nested _id:Schema.Types.ObjectId, //主鍵 _fk:Schema.Types.ObjectId, //外鍵 array:[], arrOfString:[String], // 數(shù)據(jù)類型只能為String的數(shù)組 下同 arrOfNumber:[Number], arrOfDate:[Date], arrOfBuffer:[Buffer], arrOfBoolean:[Boolean], arrOfMixed:[Schema.Types.Mixed], arrOfObjectId:[Schema.Types.ObjectId], nested:{ stuff:String, // 一個(gè)擁有具體屬性的對(duì)象 }, populate:{ type: String, ref: "users" 用于支持populate查詢(聯(lián)表查詢) } });
Schema.Types.Mixed用戶定義可復(fù)用的數(shù)據(jù)格式,如果未定義則默認(rèn)為{}。
Schema.Types.Mixed = { name: String } var AnySchema = new Schema({any:Schema.Types.Mixed}); // 等于 var AnySchema = new Schema({any:{name: String}});
ObjectId是每個(gè)Schema默認(rèn)配置的主鍵屬性,屬性名為_(kāi)id,可自己定義一個(gè)_id來(lái)覆蓋此屬性。
Schema的擴(kuò)展
Schema的擴(kuò)支持為其增加公共的實(shí)例方法和靜態(tài)方法,以便于Model和Entity的增刪改查等操作。
實(shí)例方法在生成對(duì)應(yīng)的實(shí)例(Entity層)之后才能調(diào)用,而靜態(tài)方法在model層就可以使用了。
實(shí)例方法
var PersonSchema = new Schema({name:String,type:String}); //查詢類似數(shù)據(jù) PersonSchema.methods.findSimilarTypes = function(cb){ return this.model("Person").find({type:this.type},cb); }
使用
var PersonModel = mongoose.model("Person",PersonSchema); var krouky = new PersonModel({name:"krouky",type:"前端工程師"}); krouky.findSimilarTypes(function(err,persons){ //persons中就能查詢到其他前端工程師 });
靜態(tài)方法:
PersonSchema.statics.findByName = function(name,cb){ this.find({name:new RegExp(name,"i"),cb}); } var PersonModel = mongoose.model("Person",PersonSchema); PersonModel.findByName("krouky",function(err,persons){ //找到所有名字叫krouky的人 });
Schema配置項(xiàng)
在new Schema();時(shí),可以追加一個(gè)配置項(xiàng)來(lái)配置Schema.
var config = { name: String, sex: String } var options = { safe: true, // 安全屬性 默認(rèn)為true strict: true,//嚴(yán)格配置(默認(rèn)啟用),存入數(shù)據(jù)庫(kù)時(shí),自動(dòng)驗(yàn)證 capped:1024,// 上線設(shè)置,限制一次操作的量 versionKey: "__v" // 版本鎖是Mongoose默認(rèn)配置 autoIndex: "", //自動(dòng)索引 } var ExampleSchema = new Schema(config,options);Model
Model模型,是經(jīng)過(guò)Schema構(gòu)造來(lái)的,除了Schema定義的數(shù)據(jù)庫(kù)骨架以外,還具有數(shù)據(jù)庫(kù)行為模型,他相當(dāng)于管理數(shù)據(jù)庫(kù)屬性、行為的類。
//先創(chuàng)建Schema var TankSchema = new Schema({ name:"String", size:"String" }); //通過(guò)Schema創(chuàng)建Model var TankModel = mongoose.model("Tank",TankSchema);
有了對(duì)應(yīng)的模型就可以直接拿來(lái)操作數(shù)據(jù)庫(kù)
var tank = {"something",size:"small"}; TankModel.create(tank);Entity
Entity是model的實(shí)例,根據(jù)model創(chuàng)建出來(lái)的Entity并沒(méi)有存入數(shù)據(jù)庫(kù),需要調(diào)用Entity的save方法來(lái)儲(chǔ)存。
Entity不具備Model的方法,所以只能用自己的方法。
需要注意的是,在新版本的mongoose文檔中,Entity為Documents。
//通過(guò)Model創(chuàng)建Entity var tankEntity = new TankModel("someother","size:big"); tankEntity.save();
限于篇幅,本小節(jié)暫時(shí)寫(xiě)到這里。下一節(jié)再詳細(xì)講解query,Validation,Middleware等更加高級(jí)的操作。
參考文章:
http://mongoosejs.com/docs/ap...
http://www.runoob.com/mongodb...
http://ourjs.com/detail/53ad2...
https://cnodejs.org/topic/548...
https://www.cnblogs.com/jaxu/...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/90665.html
摘要:主要表現(xiàn)在復(fù)雜的語(yǔ)句事務(wù)支持等。僅支持,在等瀏覽器中,會(huì)出現(xiàn)樣式布局混亂的情況。將群群對(duì)應(yīng)的聊天記錄保存在數(shù)據(jù)庫(kù)。用戶進(jìn)入群聊,則將其加入到對(duì)應(yīng)的中。文件大小不能超過(guò)通過(guò)模塊操作登錄注冊(cè)將用戶名作為唯一值。登錄支持自動(dòng)登錄,將密碼保存在中。 showImg(https://segmentfault.com/img/bV4jYr?w=402&h=710);showImg(https://...
摘要:連接開(kāi)啟你的服務(wù)首先確保你已安裝了,并且配置了的環(huán)境變量。此時(shí)再進(jìn)入文件夾,里面會(huì)有許多文件。創(chuàng)建連接新建一個(gè)任意目錄最好新建一個(gè)文件夾便于管理。連接錯(cuò)誤安裝依賴包,運(yùn)行此文件說(shuō)明已成功連接到數(shù)據(jù)庫(kù)。 連接 開(kāi)啟你的mongodb服務(wù) 首先確保你已安裝了mongodb,并且配置了mongodb的環(huán)境變量。在任意目錄(建議在非中文目錄)下新建database文件夾,在此文件夾下新建tes...
大吉大利,今晚吃雞! - PUBG 時(shí)隔多日,終于再次拾起這個(gè)拖了很久的項(xiàng)目。并不是因?yàn)闆](méi)時(shí)間,也不是因?yàn)檫@個(gè)項(xiàng)目對(duì)于我來(lái)說(shuō)有多困難,就是一個(gè)字————懶。此項(xiàng)目的后臺(tái),當(dāng)然是選擇node.js來(lái)實(shí)現(xiàn)。作為一個(gè)前端,node.js比起java、php簡(jiǎn)單多了。 node支持的webSocket 在npm中有很多支持webSocket的模塊,包括socket.io...
摘要:我在中寫(xiě)了這段代碼在組件被創(chuàng)建時(shí)候?qū)?huì)執(zhí)行此函數(shù)相當(dāng)于進(jìn)入頁(yè)面的自執(zhí)行使用方法監(jiān)聽(tīng)屬性并執(zhí)行一個(gè)回調(diào)函數(shù)按道理在元素被創(chuàng)建的時(shí)候,會(huì)將監(jiān)聽(tīng)到的值賦給并且打印。 天地不仁以萬(wàn)物為芻狗,宇宙無(wú)義視眾生如螻蟻 ——蕭鼎和我 上一節(jié)列出了5個(gè)關(guān)鍵點(diǎn),第一個(gè)路由已經(jīng)解決了,接下來(lái)解決第二個(gè)問(wèn)題: 組件的通信問(wèn)題 一、組件的關(guān)系 組件之間的關(guān)系無(wú)非就是兩種父子關(guān)系...
閱讀 977·2021-11-22 09:34
閱讀 2161·2021-11-11 16:54
閱讀 2196·2021-09-27 14:00
閱讀 940·2019-08-30 15:55
閱讀 1525·2019-08-29 12:46
閱讀 599·2019-08-26 18:42
閱讀 639·2019-08-26 13:31
閱讀 3183·2019-08-26 11:52