mongodb连接失败_深入浅出mongodb(一)
我年輕時(shí)注意到,我每做十件事有九件不成功,于是我就十倍地去努力干下去?!挷{
前言
在大數(shù)據(jù)的驅(qū)使下,我們要實(shí)現(xiàn)數(shù)據(jù)持久化存儲(chǔ),數(shù)據(jù)共享,數(shù)據(jù)集中管理數(shù)據(jù)庫(kù)是不二之選,小編在這里要闡述的是 mongodb 數(shù)據(jù)庫(kù),mongodb[1]是一個(gè)基于分布式文件存儲(chǔ)的開(kāi)源數(shù)據(jù)庫(kù)系統(tǒng),將數(shù)據(jù)存儲(chǔ)為一個(gè)文檔,數(shù)據(jù)結(jié)構(gòu)由鍵值(key=>value)對(duì)組成。MongoDB 文檔類似于 JSON 對(duì)象。字段值可以包含其他文檔,數(shù)組及文檔數(shù)組,操作起來(lái)比較簡(jiǎn)單和容易。
1. mongodb
1.1 安裝
- mac 安裝地址https://docs.mongodb.com/manual/tutorial/install-mongodb-on-os-x/
brew install mongodb-community@4.2
- windows 安裝地址鏈接:https://pan.baidu.com/s/1O4CeUhR8Gafm4AwJgxS2Qg 提取碼:00sk
如果是在 windows 環(huán)境下安裝,小編這里安裝在了 C 盤(pán),那么 C:\MongoDB\bin 下mongod這個(gè)是 mongodb 的服務(wù)端,mongo是 mongodb 的客戶端
1.2 運(yùn)行
- mac
windows
- 服務(wù)端 C:\MongoDB\bin mongod --dbpath=./data(這里的 data 是新建需要新建 data 文件夾,在文件夾里創(chuàng)建 db 文件夾)
- 客戶端 C:\MongoDB\bin mongo
注意: 如果出現(xiàn)在 windows 下出現(xiàn)小黑窗口閃退的情況,我們需要?jiǎng)?chuàng)建 data 文件夾,然后再 data 文件夾里創(chuàng)建 db 文件,之后再去執(zhí)行啟動(dòng)服務(wù)端的命令,因?yàn)?mongodb 默認(rèn)讀取 D 盤(pán)的文件下的 data 如果沒(méi)有就會(huì)出現(xiàn)閃退的情況。
1.3 數(shù)據(jù)庫(kù)的基本操作
- 顯示表
- 切換數(shù)據(jù)庫(kù)
- 插入數(shù)據(jù)
- 查詢數(shù)據(jù)
更多的命令行操作請(qǐng)參考https://www.runoob.com/mongodb/mongodb-create-database.html[2]
在我們的 node 開(kāi)發(fā)中,MongoDB 是支持 JavaScript 語(yǔ)言的,mongoose[3]就是 node.js 異步環(huán)境提供連接 mongodb 的一個(gè)庫(kù)。
2. mongoose
2.1 安裝
npm i mongoose -S2.2 使用
在 node.js 里采用的是CommonJS[4]的規(guī)范,需要我們采用 require 的方法來(lái)引入需要的包。
// use mongooseconst mongoose = require("mongoose");
2.3 創(chuàng)建連接
//引入mongoose模塊let mongoose = require("mongoose");
//創(chuàng)建對(duì)數(shù)據(jù)庫(kù)的連接
let connect = mongoose.createConnection(
'mongodb://127.0.0.1:27017/cms',
{
useNewUrlParser: true,//使用新的url解析
useUnifiedTopology: true //新的服務(wù)器發(fā)現(xiàn)和監(jiān)視引擎
}
)
connect.on("open",()=>{
console.log('當(dāng)mongodb成功連接數(shù)據(jù)庫(kù)之后會(huì)打印這個(gè)日志');
})
connect.on("error",(error)=>{
console.log('如果連接失敗了,會(huì)把失敗的原因傳遞給',error);
})
module.exports = connect
如果不加{ useNewUrlParser: true, useUnifiedTopology: true }這幾句話的話,控制臺(tái)會(huì)報(bào)出警告的提示,像我這種有警告強(qiáng)迫癥的人來(lái)說(shuō),還是加上吧 ?。
2.4 Schema
定義 Schema 來(lái)說(shuō)其實(shí)是用來(lái)定義文檔的基本字段和集合,也可以理解為表結(jié)構(gòu)的定義。Schema 是與數(shù)據(jù)無(wú)關(guān)的 并不能直接操作數(shù)據(jù)庫(kù)。
const Schema = mongoose.Schema;let UserSchema = new Schema({
name:String,
age:Number
},{collection:'user'})
在 mongoose 中,提供了 Schema 的類,我們可以在實(shí)例化的時(shí)候先定義mongoose.Schema,以免后續(xù)總是要出現(xiàn)丑陋的new mongoose.Schema()。
支持的基本類型
- String
- Number
- Date
- Buffer
- Boolean
- Mixed
- ObjectId
- Array
其中Mixed和ObjectId是 mongoose 特有的。
官網(wǎng)給的解釋是:
Mixed是一種無(wú)模式類型,"anything"隨便什么都可以,一般使用Schema.Types.Mixed或者{}來(lái)表示。
ObjectId是一種特殊類型,用于唯一標(biāo)識(shí)符,可以理解為主鍵,一般使用mongoose.Types.ObjectId。
更多的文檔參考https://mongoosejs.com/docs/schematypes.html[5]
?有人可能會(huì)問(wèn)為什么 ObjectId 可以做唯一標(biāo)識(shí)符呢,不會(huì)重復(fù)嗎?
2.5 ObjectId
一個(gè) ObjectId 其實(shí)可以分割為四部分,即當(dāng)前時(shí)間戳,當(dāng)前主機(jī)的hash,當(dāng)前進(jìn)程id,自動(dòng)增加的計(jì)數(shù)器,有了這幾個(gè)基本上就可以保證它的唯一性了。
- 當(dāng)前時(shí)間戳
let ts='5f2221af';
console.log(parseInt(ts,'10'));
console.log(new Date(parseInt(ts,'16')*1000));
?不懂 parseInt()里面第二個(gè)參數(shù)的[6]
- 當(dāng)前主機(jī) hash
- 當(dāng)前進(jìn)程 id
console.log(parseInt(pid,'16')); //10204 十進(jìn)制數(shù) 表示 當(dāng)前進(jìn)程id
- 自動(dòng)增加計(jì)數(shù)器
2.6 Model
Model 模型是操作數(shù)據(jù)庫(kù)最直接的部分,它代表整個(gè)集合 ,操作對(duì)象是整個(gè)集合。怎么定義 Model 呢?
let UserModel = connection.model('User',UserSchema);let UserModel2 = connection.model("User");
console.log(UserModel == UserModel2);
- 傳兩個(gè)參數(shù)表示定義模型
- 傳一個(gè)參數(shù)表示引用或者說(shuō)是獲取這個(gè)模型
//err是錯(cuò)誤對(duì)象
//doc是保存成功之后的文檔對(duì)象
console.log(err);
console.log(doc);
})
UserModel.create({name:'vivo'}).then(result=>{
console.log(result);
})
上述兩種寫(xiě)法都可以,第一種寫(xiě)法是遵循 node 的開(kāi)發(fā)習(xí)慣,callback中的第一個(gè)參數(shù)永遠(yuǎn)是錯(cuò)誤信息,第二個(gè)參數(shù)是正確信息。第二種寫(xiě)法是返回promise
上述定義 model 的方法是通過(guò) model 類創(chuàng)建的,還有一種創(chuàng)建 model 的方法是通過(guò)實(shí)例創(chuàng)建,這個(gè)創(chuàng)建出來(lái)的是一個(gè)操作對(duì)象,代表是一個(gè)單個(gè)文檔只能操作自己。
let user1 = new UserModel({name:"vivo"
})
user1.save().then(doc=>{
console.log(doc);
})
最后
本文結(jié)束,有什么問(wèn)題和有錯(cuò)誤的地方,歡迎大家的留言和評(píng)論,還有后續(xù)更新,下期更加精彩 ???
參考資料
[1]菜鳥(niǎo)教程: https://www.runoob.com/mongodb/mongodb-intro.html
[2]mongodb命令行: https://www.runoob.com/mongodb/mongodb-create-database.html
[3]mongoose官網(wǎng): https://mongoosejs.com
[4]CommonJS規(guī)范: https://javascript.ruanyifeng.com/nodejs/module.html
[5]mongoose官網(wǎng): https://mongoosejs.com/docs/schematypes.html
[6]parseInt: https://www.w3school.com.cn/jsref/jsref_parseInt.asp
?點(diǎn)擊下面?[分享]、[贊]、[在看]是對(duì)小編最大的支持?
總結(jié)
以上是生活随笔為你收集整理的mongodb连接失败_深入浅出mongodb(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 为什么本地图片都不能直接浏览器_微软工程
- 下一篇: 数据库和python的结合_MySQL数