iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 14
0

同步發表到驢形筆記

mongoose的簡單使用方法

上一篇中使用的"mongoose"有許多定義好的方法可以使用,最好先宣告幾個方法統一呼叫才會比較方便。請跟著下面的流程好好的重構一下程式碼!

個人習慣針對資料庫的操作會統一宣告在一個資料夾內保管,所以首先建立資料夾"models"在建立放置資料庫模型的js檔"schemaModels.js"然後依照練習用的範例資料庫一一建立模型

models\schemaModels.js

let mongoose  = require('mongoose');
const accounts = new mongoose.Schema({
  account_id: { type: Number},
  limit: { type: Number},
  products: { type: Array},
});
const customers = new mongoose.Schema({
  username: { type: String},
  name: { type: String},
  address: { type: String},
  birthdate: { type: Date},
  email: { type: String},
  accounts: { type: Array},
  tier_and_details: { type: Object},
});
const transactions = new mongoose.Schema({
  account_id: { type: Number},
  transaction_count: { type: Number},
  bucket_start_date: { type: Date},
  bucket_end_date: { type: Date},
  transactions: { type: Array},
});
const schema = {
  accounts: mongoose.model('accounts', accounts, 'accounts'),
  customers: mongoose.model('customers', customers, 'customers'),
  transactions: mongoose.model('transactions', transactions, 'transactions'),
}
module.exports = schema;

將資料庫下面的table定義好模型,然後開啟宣告各種操控資料庫的方法。在同一個資料夾下新增"mongoDB.js",進行修改。下面是最簡單的使用方法,mongoose有提供非常多的方法可以使用。但在這一系列只要可以用就可以了,未來有興趣或碰到問題再到mongoose的官方文件查詢更多的API(或是改使用mongoDB)

models\mongoDB.js

const schemaModels = require('./schemaModels');
const mongoose = require('mongoose');

function create (collectionName, inserObject) {
  return new Promise(function (resolve, reject) {
    let data = new schemaModels[collectionName];
    for (let key in inserObject) {
      data[key] = inserObject[key];
    }
    data.save(function (err, data, count) {
      if (err) reject(err);
      resolve(data);
    });
  })
}

function read (collectionName) {
  return schemaModels[collectionName].find().sort('time'); //可以加正負號 -號是小的在前
}

function update (collectionName, id, inserObject) {
  return new Promise(function (resolve, reject) {
    inserObject.time = moment().valueOf();
    schemaModels[collectionName].findById(id, function (err, data) {
      for (let key in inserObject) {
        data[key] = inserObject[key];
      }
      data.save(function (err, todo, count) {
        if (err) reject(err);
        resolve(data);
      });
    })
  })
}

function destroy (collectionName, id) {
  return new Promise(function (resolve, reject) {
    schemaModels[collectionName].findById(id, function (err, data) {
      data.remove(function (err, data) {
        if (err) return reject(err);
        resolve(data);
      });
    });
  });
};

mongoose.connect('mongodb+srv://ItHelp_Donkey:ItHelp_Donkey@cluster0.acbw6.gcp.mongodb.net/sample_analytics?retryWrites=true&w=majority', { 
  useNewUrlParser: true, 
  useUnifiedTopology: true 
});

module.exports = {
  create,
  read,
  update,
  destroy
};

好的,再次回到一開始呼叫的位置 app.js 把原本那段換掉,直接用發法呼叫資料庫方法。

app.js

略
let DB = require('./models/mongoDB');

DB.read('accounts').then(res=>{
  console.log(res);
})

module.exports = app;

好的,未來要對資料庫進行CRUD就只要有這四個統一宣告好的方法就可以了

githubday14


上一篇
[day13][後端][學習] 串接,雲端MongoDB Atlas資料庫(下)
下一篇
[day15][全端][學習] EJS,長的跟HTML87%像的樣版語言
系列文
什麼都略懂一點,生活更多彩一些。從web跑js出發到部屬heroku伺服器撈取API建構線上網站與LineBot30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言