# mongoose

参考文章

# 基本概念

MongoDB的存储模式大致上可以理解为我们前端中的JSON.

// db
{
  // collection
  "collection-a": [
    // document
    { "field-1": "string", "field-2": 100, "field-3": true, "field-4": [] }
  ],

  "collection-b": []
}

moongoose中一个document的生成过程

  1. Schema(模式/模型骨架) 用来定义模型
  2. Model(模型) 用来管理一个集合, 应该相当于数据表(collection/table)
  3. Entity(实体) 由Model创建出来的一个实例, 应该相当于一条记录(document/row)

大概过程是

Schema -> Model -> Entity

# 安装 MongoDB (windows)

打开mongoDB 下载地址 (opens new window), 然后选择版本, 最后点击下载即可. 安装过程只需一路点击下一步.

MongoDB 可视化管理工具 (opens new window)

# 在 koa 中使用

使用Mongoose (opens new window)可以让我们中nodejs服务中连接并操作MongoDB数据库.

  1. 新建一个空的koa项目
  2. 安装依赖

一个最简单的例子

const Koa = require("koa");
const KoaRouter = require("koa-router");
const cors = require("koa2-cors");
const mongoose = require("mongoose");

const app = new Koa();
const router = new KoaRouter();

const db = mongoose.connection;
db.on("error", console.error.bind(console, "connection error:"));
db.once("open", function() {
  console.log("mongodb ok");
});

// 连接数据库
// 本例中的数据库名称是 'test'
mongoose.connect("mongodb://127.0.0.1:27017/test", {
  useNewUrlParser: true,
  useUnifiedTopology: true,
});

// 定义 schema 和 model
const catSchema = new mongoose.Schema({ name: String });
const Cats = mongoose.model("cats", catSchema);

app.proxy = true;
app.use(cors());

router.get("/", (ctx) => {
  ctx.body = {
    msg: "hello koa",
  };
});

router.post("/cats/add", async (ctx) => {
  // 新增记录
  const cat = await Cats.create({ name: `cat ${Math.random()}` });
  ctx.body = {
    msg: "ok",
    data: cat,
  };
});

router.get("/cats", async (ctx) => {
  // 查询所有记录
  const cats = await Cats.find();
  ctx.body = {
    msg: "ok",
    data: cats,
  };
});

app.use(router.routes());

app.listen(8000);
Last Updated: 4/13/2021, 11:43:34 AM