在Ubuntu 19.10中使用mongoose來連線mongoDB

iherb中文發表於2020-05-17

Mongoose 是一個建立在MongoDB 驅動之上的ODM( 物件資料建模) 庫。它允許在NodeJS 環境中與MongoDB 進行簡潔的互動和簡單的物件建模。

 

在開始之前,建議:

設定具有sudo 特權的非根使用者。

驗證您的伺服器是最新的。

確保安裝了build-essential 。如果不是,安裝使用:

$ sudo apt install build-essential

 

步驟1:MongoDB

安裝MongoDB

$ sudo apt install mongodb

檢查安裝是否正確。在輸出中查詢“active (running) ”。

$ sudo systemctl status mongodb
Active: active (running)

步驟2:NodeJS NPM

 

新增最新的穩定NodeJS 庫。

$ curl -sL | sudo -E bash -

安裝NodeJS

$ sudo apt install nodejs

檢查NodeJS NPM 是否安裝正確。

$ node -v && npm -v
v12.x.x
6.x.x

步驟3: 初始化Mongoose 專案

建立專案根目錄。

$ cd ~
$ mkdir mongooseProject && cd mongooseProject

初始化一個NodeJS 開發環境,自動生成一個package.json:

$ npm init

根據你的專案回答簡短的問題。例如,如果您在每個問題上按return 接受預設值,npm init 程式會響應:

About to write to /root/mongooseProject/package.json:
 

{
"name": "mongooseproject",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}

使用npm 在專案根目錄中安裝所需的包:

$ npm install --save mongoose

步驟4: 定義一個模型

 

在專案根目錄中建立一個名為Models 的資料夾,並將cd 放入其中:

$ cd ~/mongooseProject
$ mkdir Models && cd Models

建立connectDB.js 。該檔案將包含MongoDB 伺服器所需的連線邏輯。

$ nano connectDB.js

將以下內容貼上到connectDB.js 中。

const mongoose = require('mongoose'); // Import mongoose library
 

module.exports = function(uri) {
    mongoose.connect(uri, {  //attempt to connect to database
        useNewUrlParser: true, // Recommended, insures support for future MongoDB drivers
        useUnifiedTopology: true // Recommended, uses new MongoDB topology engine
    }).catch(error => console.log(error)) // Error handling
 

 

    mongoose.connection.on('connected', function () { // On connection
        console.log('Successful connection with database: ' + uri); // Callback for successful connection
    });
}

建立Users.js 。這個檔案將包含資料庫集合使用者的模型。

$ nano Users.js

將以下內容貼上到Users.js 中。這為使用者定義了一個基本模式。

const mongoose = require("mongoose"); // Import mongoose library
const Schema = mongoose.Schema // Define Schema method
 

// Schema
var UsersSchema = new Schema({ // Create Schema
    name: String, // Name of user
    age: Number, // Age of user
    role: String // Role of user
})
 

// Model
var Users = mongoose.model("Users", UsersSchema) // Create collection model from schema
module.exports = Users // export model

步驟5: 將文件插入MongoDB

在專案的根目錄中建立insertUser.js

$ cd ~/mongooseProject
$ nano insertUser.js

將以下內容貼上到insertUser.js 檔案中。該檔案將文件插入到使用者集合中。

//Library
const mongoose = require("mongoose")
 

// Database connection
const connectDB = require("./Models/connectDB")
var database = "mongoose" // Database name
 

// Models
const Users = require("./Models/Users")
 

// Connect to database
connectDB("mongodb://localhost:27017/"+database)
 

var insertedUser = new Users({ // Create new document
    name: "John Doe",
    age: 18,
    role: "Example User"
})
 

insertedUser.save(err => { // save document inside Users collection
    if(err) throw err // error handling
    console.log("Document inserted!")
    mongoose.disconnect() // disconnect connection from database once document is saved
})

執行insertUser.js

$ node insertUser.js
Successful connection with database: mongodb://localhost:27017/mongoose
Document inserted!

步驟6: MongoDB 讀取文件

在專案的根目錄中建立readUsers.js

$ cd ~/mongooseProject
$ nano readUsers.js

將以下內容貼上到readUsers.js 中。該檔案讀取使用者集合中的文件。

//Library
const mongoose = require("mongoose")
 

// Database connection
const connectDB = require("./Models/connectDB")
var database = "mongoose" // Database name
 

// Models
const Users = require("./Models/Users")
 

// Connect to database
connectDB("mongodb://localhost:27017/"+database)
 

Users.find({}, (err, users)=>{ //find and return all documents inside Users collection
    if(err) throw err // error handling
    console.log(users)
    mongoose.disconnect()
})

執行readUsers.js 輸出是一個物件陣列。

$ node readUsers.js
Successful connection with database: mongodb://localhost:27017/mongoose
[ { _id: ************************,
    name: 'John Doe',
    age: 18,
    role: 'Example User',
    __v: 0 } ]

 

完成。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31380193/viewspace-2692614/,如需轉載,請註明出處,否則將追究法律責任。

相關文章