Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Node.js 之 Mongoose 入门 #20

Open
zenglinan opened this issue Sep 11, 2019 · 0 comments
Open

Node.js 之 Mongoose 入门 #20

zenglinan opened this issue Sep 11, 2019 · 0 comments

Comments

@zenglinan
Copy link
Owner

zenglinan commented Sep 11, 2019

用 Mongoose 可以很简单地操作 MongoDB 数据库。

1. 引入并连接

需要通过 uri 指定所需连接数据库的路径, 格式为:

'mongodb://username:password@host:port/database?options...'

连接和断开连接时可以指定回调, 如下便是一个连接示例:

const mongoose = require('mongoose')
const uri = "mongodb://127.0.0.1:27017/db"

mongoose.connection.on('connected', () => {
  console.log("连接成功");
})
mongoose.connection.on('error', () => {
  console.log("连接失败");
})
mongoose.connection.on('disconnected', () => {
  console.log("失去连接");
})

mongoose.connect(uri)

也可以简化一下:

mongoose.connect(uri, (err) => {
  if(err) console.log(err)
  else console.log("连接成功");
  
})

2. Schema

Mongoose 中的一切都源于 Schema, 每个模式都映射到一个 MongoDB 集合,并定义该集合中文档的形状。

上面这段话来自于官方文档, 可能读起来有点迷糊, 没关系, 目前只需要知道他就像一种模式, 可以用来定义一些数据的格式, 那, Schema 怎么定义数据格式?

举个例子:

const UserSchema = new Schema({
  name: {type: String, require: true},
  age: {type: Number, require: true},
})

与此同时, 还可以定义更多的类型:

String
Number
Date
Buffer
Boolean
Mixed
ObjectId
Array

3. Model

Model(模型) 是通过 Schema 生成的构造器, 用于生成文档实例和操作数据库

const User = mongoose.model('User', UserSchema)
// 第一个参数会被 mongoose 转为小写复数形式, 作为 collection 集合的名字

除此之外, Model还提供了增删查改的功能:

增加一个文档:

Model.create({
  name: "xiaohua",
  age: 18
},(err,mes) => {
  if(err) console.error(err);
  else console.log(mes);
})

插入多条:

User.insertMany([{
  name: "yilei",
  age: 20
}, {
  name: "yilei",
  age: 60
}], (err, doc) => {
  if (err) console.error(err)
  console.log(doc);
})

除了可以用 Model 上的静态方法生成文档, 还可以通过实例化 Model 的方式生成文档, 然后用实例方法 save() 保存

删除一条:

User.deleteOne({
  name: "xiaoli"
}, (err) => {
  if(err) console.error(err)
})

删除多条:

User.deleteMany({
  name: "yilei"
}, (err, doc) => {
  if (err) console.error(err)
  console.log(doc);
})

User.find({
  name: "xiaoli"
}, (err, doc) => {
  if(err) console.error(err)
  console.log(doc);
})

// 匹配规则还可以更复杂一点, 比如我要找 10 =< 年龄 <= 99 的
User.find({
  age: {"$gt": 10, "$lt": 99}
}, (err, doc) => {
  if(err) console.error(err)
  console.log(doc);
})

除此之外, Model 上还有 findById, findOne, where等静态方法

更改一条:

User.updateOne({
  name: "yilei"
},{age: 21}, (err, doc) => {
  if (err) console.error(err)
  console.log(doc);
})

更改多条:

User.updateMany({
  name: "xiaoli"
},{age: 21}, (err, doc) => {
  if (err) console.error(err)
  console.log(doc);
})

4. Document

在 Mongodb 中, Document(文档) 即数据

每个 Document 都是一个 Model 的实例

save

文档可以用 save() 方法保存

// 实例化 document
let user = new User({
  name: "xiaohua",
  age: 18
})
// 保存
user.save((err,mes) => {
  if(err) console.error(err);
  else console.log(mes);
})

也可以用上述的 Model.create() Model.insertMany() 创建

@zenglinan zenglinan changed the title 随手笔记之 Mongoose 基础 随手笔记之 Mongoose 操作 MongoDB 基础 Sep 11, 2019
@zenglinan zenglinan changed the title 随手笔记之 Mongoose 操作 MongoDB 基础 随手笔记之 Mongoose 基础操作 Sep 11, 2019
@zenglinan zenglinan changed the title 随手笔记之 Mongoose 基础操作 Node Mongoose 基础操作 Sep 17, 2019
@zenglinan zenglinan changed the title Node Mongoose 基础操作 Node.js 之 Mongoose 的基本操作 Sep 17, 2019
@zenglinan zenglinan changed the title Node.js 之 Mongoose 的基本操作 Node.js 之 Mongoose 入门 Sep 17, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant