摘要:連接開啟你的服務(wù)首先確保你已安裝了,并且配置了的環(huán)境變量。此時(shí)再進(jìn)入文件夾,里面會(huì)有許多文件。創(chuàng)建連接新建一個(gè)任意目錄最好新建一個(gè)文件夾便于管理。連接錯(cuò)誤安裝依賴包,運(yùn)行此文件說明已成功連接到數(shù)據(jù)庫。
連接 開啟你的mongodb服務(wù)
首先確保你已安裝了mongodb,并且配置了mongodb的環(huán)境變量。
在任意目錄(建議在非中文目錄)下新建database文件夾,在此文件夾下新建test文件夾(確保此文件夾為空的)。
然后打開cmd,輸入:
mongod --dbpath "test文件夾的絕對(duì)路徑———— E:database est"
waiting for connections on port 27017 說明你已經(jīng)在localhost:27017端口上開啟了服務(wù)。
此時(shí)再進(jìn)入test文件夾,里面會(huì)有許多WT文件。
創(chuàng)建連接新建一個(gè)index.js(任意目錄,最好新建一個(gè)mongodbDemo文件夾便于管理)。
var mongoose = require("mongoose"); mongoose.connect("mongodb://localhost/test"); var db = mongoose.connection; db.on("error",console.error.bind(console,"mongodb連接錯(cuò)誤:")); db.once("open",function(){ console.log("mongodb connection is OK!"); });
安裝mongoose依賴包,運(yùn)行此文件
npm install mongoose node index.js
說明已成功連接到數(shù)據(jù)庫。
寫入第一條數(shù)據(jù) Createmongoose寫入數(shù)據(jù)的方法有兩個(gè),分別是Model.create()和Documents.save()[即上文的Entity];
1.在寫入數(shù)據(jù)之前,先新建一個(gè)model
var CatSchema = new mongoose.Schema({ // 新建一個(gè)model對(duì)象 name: String }); var CatModel = mongoose.model("Cat", CatSchema); // 這一步才正式寫入數(shù)據(jù)庫,數(shù)據(jù)庫對(duì)應(yīng)的model名為Cat
2.插入一條數(shù)據(jù)
//Model.create CatModel.create({name: "ketty"},function(err,res){ // 第一個(gè)參數(shù)規(guī)定為錯(cuò)誤信息 console.log(err); console.log(res); }) //promise寫法 CatModel.create({ name: "kitty" }).then(res=>{console.log(res)}) // 成功返回當(dāng)前數(shù)據(jù) .catch(err=>{console.log(err)}); // Documents.save() var catDoc = new CatModel({name:"ketty"}); catDoc.save(function (err, res) { if (err)console.log(err); console.log(res); });基于Model的查詢 簡(jiǎn)單查詢
Model.find().then(res=>{ // 傳空匹配所有 log(res); }).catch(err=>{ log(err); }); Model.find({name: "kitty"}).then(res=>{ // 匹配name為kitty的所有數(shù)據(jù) log(res); // 若為查詢到數(shù)據(jù) res為[] }).catch(err=>{ log(err); }); Model.findOne({name: "kitty"}).then(res=>{ // 匹配name為kitty的第一條數(shù)據(jù) log(res); // 若為查詢到數(shù)據(jù) res為null }).catch(err=>{ log(err); }); Model.findById(id).then(res=>{// 根據(jù)id查詢 // tido }).catch(err=>{ // tido })
find和findOne只接受Object作為參數(shù),如果未傳參數(shù)則默認(rèn)為{}。傳其他數(shù)據(jù)類型都會(huì)拋出異常
條件查詢“$lt” 小于
“$lte” 小于等于
“$gt” 大于
“$gte” 大于等于
“$ne” 不等于
// 查詢 age 大于等于18并小于等于30的文檔 Model.find({"age":{ "$get":18 , "$lte":30 } } );或查詢
‘$in’ 一個(gè)鍵對(duì)應(yīng)多個(gè)值
‘$nin’ 同上取反, 一個(gè)鍵不對(duì)應(yīng)指定值
“$or” 多個(gè)條件匹配, 可以嵌套 $in 使用
“$not” 同上取反, 查詢與特定模式不匹配的文檔
// 查詢 age等于20或21或21或’haha’的文檔 Model.find({"age":{ "$in":[20,21,22."haha"]} } ); // 查詢 age等于18 或 name等于’xueyou’ 的文檔 Model.find({"$or" : [ {"age":18} , {"name":"xueyou"} ] });類型查詢
"$exists" 是否存在某屬性
null 能匹配自身和不存在的值, 想要匹配鍵的值為null, 就要通過 “$exists” 條件判定鍵值已經(jīng)存在
// 查詢 age值為null的文檔 Model.find("age" : { "$in" : [null] , "exists" : true } ); //查詢所有存在name屬性的文檔 Model.find({name: {$exists: true}}); //查詢所有不存在telephone屬性的文檔 Model.find({telephone: {$exists: false}});正則表達(dá)式
MongoDb 使用 Prel兼容的正則表達(dá)式庫來匹配正則表達(dá)式
// 查詢name為 joe 的文檔, 并忽略大小寫 Model.find( {"name" : /joe/i } ) //查詢匹配各種大小寫組合 Model.find( {"name" : /joe?/i } )查詢數(shù)組
‘$all’ 匹配數(shù)組中多個(gè)元素
‘$size’ 匹配數(shù)組長(zhǎng)度
‘$slice’ 查詢子集合返回
// 查詢 array(數(shù)組類型)鍵中有10的文檔, array : [1,2,3,4,5,10] 會(huì)匹配到 Model.find({"array":10} ); //查詢 array(數(shù)組類型)鍵中下標(biāo)5對(duì)應(yīng)的值是10, array : [1,2,3,4,5,10] 會(huì)匹配到 Model.find({"array[5]":10} ); //查詢 匹配array數(shù)組中 既有5又有10的文檔 Model.find({"array":[5,10]} ); // 查詢 匹配array數(shù)組長(zhǎng)度為3 的文檔 Model.find({"array":{"$size" : 3} } ); // 查詢 匹配array數(shù)組的前10個(gè)元素 Model.find({"array":{"$skice" : 10} } ); //查詢 匹配array數(shù)組的第5個(gè)到第10個(gè)元素 Model.find({"array":{"$skice" : [5,10] } } );Where_javacript語句查詢
用$where可以執(zhí)行任意javacript語句作為查詢的一部分,如果回調(diào)函數(shù)返回 true 文檔就作為結(jié)果的一部分返回
Model.find({"$where": function() { if (this.x !== null && this.y !== null) { return this.x + this.y === 10 ? true : false; // retrun將替代返回結(jié)果 } else { return true; } } }) Model.find( {"$where" : "this.x + this.y === 10" } ) // this指向Model Model.find( {"$where" : " function(){ return this.x + this.y ===10; } " } )聯(lián)表查詢
要實(shí)現(xiàn)聯(lián)表查詢需要將連接的Model的主鍵_id指向需要對(duì)應(yīng)Model的某個(gè)屬性上。使用populate進(jìn)行查詢
實(shí)現(xiàn)方法如下:
// *****************創(chuàng)建Model************ var cityModel= mongoose.model("city", { cityName: String, townList: [] }); var countryModel = mongoose.model("country", { country: String, cityList:[{ type: mongoose.Schema.ObjectId, ref: "city" // 將"sity"Model的主鍵與country的cityList對(duì)應(yīng) }] }); // ****************插入數(shù)據(jù)************************ cityModel.create({cityName:"shanghai",townList:["lujiazui"]}); cityModel.create({cityName:"guangzhou",townList:["tianhe"]}); cityModel.create({cityName:"beijing",townList:["zhaoyang"]}); var countryObj = { country:"china", cityList:[] } cityModel.find().then(res=>{ //將所有數(shù)據(jù)查出,并將對(duì)應(yīng)的_id存入數(shù)組 for(let i in res){ countryObj.cityList.push(res[i]._id); } // 插入國家數(shù)據(jù) countryModel.create(countryObj,function(err,res){ console.log(err); console.log("res" + res); }); }); // ****************查詢結(jié)果********************** countryModel.find().then(res=>{ // 普通查詢 console.log(res); }).catch(err=>{ console.log(err); }) /*結(jié)果為 [ { cityList: [ 5a4ded2b78110500d8b94726, 5a4ded2b78110500d8b94725, 5a4ded2b78110500d8b94727 ], _id: 5a4df149c249713348a2f546, country: "china", __v: 0 } ] */ countryModel.find({country: "china"}).populate("cityList").then(res=>{ // populate查詢 console.log(res); }) /* [ { cityList: [ [Object], [Object], [Object] ], _id: 5a4df149c249713348a2f546, country: "china", __v: 0 } ] */游標(biāo)
limit(3) 限制返回結(jié)果的數(shù)量
skip(3) 跳過前3個(gè)文檔,返回其余的
sort( "username":1 , "age":-1 } ) 排序 鍵對(duì)應(yīng)文檔的鍵名, 值代表排序方向, 1 升序, -1降序
‘$inc’ 增減修改器,只對(duì)數(shù)字有效.下面的實(shí)例: 找到 age=22的文檔,修改文檔的age值自增1
Model.update({"age":22}, {"$inc":{"age":1}});
‘$set’ 指定一個(gè)鍵的值,這個(gè)鍵不存在就創(chuàng)建它.可以是任何MondoDB支持的類型.
Model.update({"age":22}, {"$set":{"age":"haha"}});
‘$unset’ 刪除一個(gè)鍵
Model.update({‘a(chǎn)ge’:22}, {’$unset’:{‘a(chǎn)ge’:‘haha’} } );數(shù)組更新
‘$push’ 給一個(gè)鍵push一個(gè)數(shù)組成員,鍵不存在會(huì)創(chuàng)建
Model.update({"age":22}, {"$push":{"array":10} } );
‘$addToSet’ 向數(shù)組中添加一個(gè)元素,如果存在就不添加
Model.update({"age":22}, {"$addToSet":{"array":10} } );
‘$each’ 遍歷數(shù)組, 和 $push 修改器配合可以插入多個(gè)值
Model.update({"age":22}, {"$push":{"array":{"$each": [1,2,3,4,5]}} } );
‘$pop’ 向數(shù)組中尾部刪除一個(gè)元素
Model.update({"age":22}, {"$pop":{"array":1} } );
‘$pull’ 向數(shù)組中刪除指定元素
Model.update({"age":22}, {"$pull":{"array":10} } );刪除
Model.remove(conditions,callback); // conditions為查詢條件,可參考find
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/90668.html
摘要:為安裝文件,無需再配置環(huán)境變量。連接操作有以下包作者并未查到除此之外的包,但不代表沒有。等于是每個(gè)默認(rèn)配置的主鍵屬性,屬性名為可自己定義一個(gè)來覆蓋此屬性。需要注意的是,在新版本的文檔中,為。通過創(chuàng)建限于篇幅,本小節(jié)暫時(shí)寫到這里。 我的琴聲嗚咽,我的淚水全無。我把遠(yuǎn)方的遠(yuǎn)歸還草原。 - 海子《九月》 mongodb安裝 什么是Mongodb?就是一個(gè)基...
摘要:主要表現(xiàn)在復(fù)雜的語句事務(wù)支持等。僅支持,在等瀏覽器中,會(huì)出現(xiàn)樣式布局混亂的情況。將群群對(duì)應(yīng)的聊天記錄保存在數(shù)據(jù)庫。用戶進(jìn)入群聊,則將其加入到對(duì)應(yīng)的中。文件大小不能超過通過模塊操作登錄注冊(cè)將用戶名作為唯一值。登錄支持自動(dòng)登錄,將密碼保存在中。 showImg(https://segmentfault.com/img/bV4jYr?w=402&h=710);showImg(https://...
摘要:注冊(cè)成功后會(huì)返回注冊(cè)用戶的此就是上面說到的,用于用戶登陸的基礎(chǔ),請(qǐng)保管好。 地址 https://github.com/billyhoomm...http://blog.billyhu.com 說明(Instructions) 本項(xiàng)目后臺(tái)基于express、mongodb,前臺(tái)基于Vue2.0全家桶、bootstrap、scss預(yù)編譯器以及一眾工具類插件 項(xiàng)目前后臺(tái)代碼在同一個(gè)目錄中...
閱讀 2858·2021-09-22 15:43
閱讀 4718·2021-09-06 15:02
閱讀 852·2019-08-29 13:55
閱讀 1684·2019-08-29 12:58
閱讀 3068·2019-08-29 12:38
閱讀 1213·2019-08-26 12:20
閱讀 2270·2019-08-26 12:12
閱讀 3318·2019-08-23 18:35