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