日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

mongodb连接失败_深入浅出mongodb(一)

發布時間:2024/9/30 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 tap mongodb/brew
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
$ mongo
  • windows

    • 服務端 C:\MongoDB\bin mongod --dbpath=./data(這里的 data 是新建需要新建 data 文件夾,在文件夾里創建 db 文件夾)
    • 客戶端 C:\MongoDB\bin mongo

注意: 如果出現在 windows 下出現小黑窗口閃退的情況,我們需要創建 data 文件夾,然后再 data 文件夾里創建 db 文件,之后再去執行啟動服務端的命令,因為 mongodb 默認讀取 D 盤的文件下的 data 如果沒有就會出現閃退的情況。

1.3 數據庫的基本操作

  • 顯示表
show dbs;
  • 切換數據庫
use test;
  • 插入數據
db.test.insert({name:"vivo"});
  • 查詢數據
db.test.find();

更多的命令行操作請參考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 -S

2.2 使用

在 node.js 里采用的是CommonJS[4]的規范,需要我們采用 require 的方法來引入需要的包。

// use mongoose
const 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 id = '5f2221af6fd5e827dc5619b6';
let ts='5f2221af';
console.log(parseInt(ts,'10'));
console.log(new Date(parseInt(ts,'16')*1000));

?不懂 parseInt()里面第二個參數的[6]

  • 當前主機 hash
let host = '6fd5e8';
  • 當前進程 id
let pid = '27dc';
console.log(parseInt(pid,'16')); //10204 十進制數 表示 當前進程id
  • 自動增加計數器
let seq = '5619b6'; //自動增加的計數器

2.6 Model

Model 模型是操作數據庫最直接的部分,它代表整個集合 ,操作對象是整個集合。怎么定義 Model 呢?

let UserModel = connection.model('User',UserSchema);
let UserModel2 = connection.model("User");
console.log(UserModel == UserModel2);
  • 傳兩個參數表示定義模型
  • 傳一個參數表示引用或者說是獲取這個模型
UserModel.create({name:'vivo'},(err,doc)=>{
//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(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。