入門指南

首先,請確保您已安裝 MongoDBNode.js

接著,使用 npm 從命令列安裝 Mongoose。

npm install mongoose --save

現在,假設我們喜歡毛茸茸的小貓,並想記錄我們遇到的每一隻小貓到 MongoDB。我們需要做的第一件事是在我們的專案中包含 mongoose,並開啟與我們本地運行的 MongoDB 實例上的 test 資料庫的連線。

// getting-started.js
const mongoose = require('mongoose');

main().catch(err => console.log(err));

async function main() {
  await mongoose.connect('mongodb://127.0.0.1:27017/test');

  // use `await mongoose.connect('mongodb://user:password@127.0.0.1:27017/test');` if your database has auth enabled
}

為了簡潔起見,讓我們假設以下所有程式碼都在 main() 函式內。

使用 Mongoose,所有內容都源自於 綱要(Schema)。讓我們取得它的參考並定義我們的小貓。

const kittySchema = new mongoose.Schema({
  name: String
});

目前為止一切順利。我們有一個具有一個屬性的綱要,name,它將是一個 String。下一步是將我們的綱要編譯為 模型(Model)

const Kitten = mongoose.model('Kitten', kittySchema);

模型是一個類別,我們用它來建構文件。在這種情況下,每個文件都會是一隻小貓,其屬性和行為如我們的綱要中所宣告。讓我們建立一個代表我們剛在人行道外面遇到的那隻小傢伙的小貓文件。

const silence = new Kitten({ name: 'Silence' });
console.log(silence.name); // 'Silence'

小貓會喵喵叫,所以讓我們看看如何為我們的文件新增「說話」功能。

// NOTE: methods must be added to the schema before compiling it with mongoose.model()
kittySchema.methods.speak = function speak() {
  const greeting = this.name
    ? 'Meow name is ' + this.name
    : 'I don\'t have a name';
  console.log(greeting);
};

const Kitten = mongoose.model('Kitten', kittySchema);

新增到綱要的 methods 屬性的函式會被編譯到 Model 原型中,並在每個文件實例上公開。

const fluffy = new Kitten({ name: 'fluffy' });
fluffy.speak(); // "Meow name is fluffy"

我們有會說話的小貓了!但是我們仍然沒有將任何內容儲存到 MongoDB。每個文件都可以透過呼叫其 save 方法儲存到資料庫。如果發生任何錯誤,回呼的第一個引數將會是一個錯誤。

await fluffy.save();
fluffy.speak();

假設時間流逝,我們想要顯示我們看到的所有小貓。我們可以透過我們的 Kitten 模型(model)存取所有的小貓文件。

const kittens = await Kitten.find();
console.log(kittens);

我們剛剛將資料庫中的所有小貓記錄到主控台。如果我們想按名稱篩選我們的小貓,Mongoose 支援 MongoDB 豐富的 查詢(querying)語法。

await Kitten.find({ name: /^fluff/ });

這會搜尋所有具有以「fluff」開頭的 name 屬性的文件,並將結果作為小貓陣列傳回給回呼。

恭喜您

我們的快速入門到此結束。我們建立了一個綱要,新增了一個自訂文件方法,並使用 Mongoose 在 MongoDB 中儲存和查詢了小貓。請前往指南API 文件以了解更多資訊。