# 增删改查案例

前言

使用 node.js+mongodb 实现基本的增删改查需求

# 1.mongodb

  • 安装依赖
cnpm i mongoose -S
1
  • 配置 mongodb
const mongoose = require("mongoose");
const conn = mongoose.createConnection(
  "mongodb://zhoubichuan.com:27017/school",
  {
    authSource: "admin",
    user: "root",
    pass: "xxxx",
    useNewUrlParser: true,
    useUnifiedTopology: true,
  }
);
conn.on("error", (err) => {
  console.log("连接失败");
});
conn.on("open", () => {
  console.log("数据库连接成功");
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  • 使用桌面版 docker 启动 mongodb

# 2.后端服务

let UserSchema = new mongoose.Schema({ name: String, age: Number }); // Schama规定了集合的文档属性名和属性类型
let User = conn.model("User", UserSchema); // 基于Schema创建模型
1
2
  • 添加时间
const schema = Schema(
  {
    createdAt: Number,
    updatedAt: Number,
    name: String,
  },
  {
    timestamps: { currentTime: () => Math.floor(Date.now() / 1000) },
  }
);
1
2
3
4
5
6
7
8
9
10

# 2.1 创建字段

  • 方式一
let create = (err, doc) => {
  //err错误对象, doc是保存后的文档对象
  console.log(doc);
};
User.create({ name: "zbc", age: 1, home: "beijing" }, create);
1
2
3
4
5
  • 方式二
let user = new User({ name: "zbc", age: 4 });
user.save((err, doc) => {
  console.log(doc);
  doc.age = 44;
  doc.save();
});
1
2
3
4
5
6

# 2.2 错误报告

let user2 = new User({ name: 4, age: "w" });
user2.save((err, doc) => {
  console.log(err);
});
1
2
3
4

# 2.3 更新字段

// User这个模型有多种方法,可以操作数据库
User.updateMany(
   { name: "zbc" },
   {
 $set: { // 被更新的字段: 更新后的值
  
 }
}, (err, doc) => {
  //err错误对象, doc是保存后的文档对象
  console.log(doc);
}
)
1
2
3
4
5
6
7
8
9
10
11
12

# 2.4 删除字段

// User这个模型有多种方法,可以操作数据库
User.deleteMany({ name: "zbc" }, (err, doc) => {
  console.log(err);
  console.log(doc);
});
1
2
3
4
5

# 2.5 查询字段

let users = [];
for (let i = 1; i < 10; i++) {
  users.push({ id: i, age: i, name: `zbc${i}` });
}
(async function () {
  let doc = await User.create(users);
  console.log(doc);
})();
User.find({}, { name: 0 }, (err, docs) => {
  console.log(err);
  console.log(docs);
});

User.findOne({}, { name: 0 }, (err, docs) => {
  console.log(err);
  console.log(docs);
});

User.findById("5c287a90828986304ca1bf79", (err, docs) => {
  console.log(err);
  console.log(docs);
});

User.find({ age: { $get: 3, $lt: 6 } }, (err, docs) => {
  console.log(err);
  console.log(docs);
});

//判断某个字段是否存在
User.find({ age: { $exist: true } }, (err, docs) => {
  console.log(err);
  console.log(docs);
});

let pageNum = 2;
let pageSize = 3;
User.find({})
  .sort({ age: 1 })
  .skip((pageNum - 1) * pageSize)
  .limit(pageSize)
  .exec((err, docs) => {
    console.log(docs);
  });

//总条数
User.count((err, total) => {
  console.log(total);
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
  • 封装函数
class User {
  constructor() {
    let users = [];
    for(let i=0;){
        users.push({id:i,age:i,})
    }
  }
  skip(skip) {
    this.skip = skip;
    return this
  }
  limit(limit) {
    this.limit = limit;
      return this
  }
  sort(sort) {
    this.sort = sort;
      return this
  }
  exec(){
    this.users.sort((a,b)=>{
        return a.age - b.age
    })
  }
}
let user=new User()
let result=user.skip().limit().sort().exec()
console.log(result)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28