monogoDB简单使用(增、删、改、查、更新等)

准备工作

首先需要确保已经启动了 MongoDB,如果没有启动以管理员身份运行cmd

net start mongoDB

其次需要安装第三方模块

npm install mongoose

并将其引入

const mongoose = require(‘mongoose’);

数据库的相关概念

术语 解释
database 数据库(数据仓库)
collection 集合,一组数据的集合,可以理解为js里的数组
document 文档,一条具体的数据,可以理解为js的里对象
field 字段,文档中的属性名称,可以理解为js里的对象属性

在一个数据库软件中可以包含多个数据仓库,在每个数据仓库中可以包含多个数据集合,在每一个数据集合中也可以包含多条文档(具体的数据),而每个集合里面又可以包含多个字段

从下面的图片具体来看

  • 数据仓库有:admin、config、local(这三个是软件自带的)、playground(自己创建的)
  • 集合(以playground为栗):posts、students、tests、users
  • 文档:下图中右侧有3条文档
  • 字段:_id(软甲自己创建的,是这条数据的唯一标识)、name、age、email
    在这里插入图片描述

与数据库进行连接

mongose.connect('mongodb://localhost/playground', {
    useNewUrlParser: true
  })
  .then(() => console.log('数据库连接成功'))
  .catch(err => {
    console.log(err);
    console.log('数据库连接失败');
  });

当你正在使用一个数据库时,如果该数据库不存在的话,那么MongoDB将会自动创建该数据库。另外如果只创建了数据库而没有给数据库里面添加数据的话,那么你刷新了MongoDB Compass也不会看到这个数据库,因为里面没有集合(也就是没有数据)

扫描二维码关注公众号,回复: 9916693 查看本文章

创建集合

创建集合可以分为两步:
1.对集合设定相应的规则,也就是你创建的这条数据(文档)里面包含哪些内容(对象),这些内容有什么要求
2.根据规则创建集合

//创建规则
let userSchema = new mongose.Schema({
  name: String,
  age: Number,
  hobbies: [String]
});
//根据规则创建集合
//这里要写大写字母,但是在软件中你会看到小写并加了s
let User = mongose.model('User', userSchema); //users

创建文档(具体数据)

创建文档有两种方法

// 创建文档的第一种方法
let data = {
  name: '张三',
  age: 19,
  hobbies: ['跑步', '睡觉']
};
let person1 = new User(data);
//将数据保存到数据库中1
person1.save();

// 创建文档的第二种方法
//对返回结果的处理方式
User.create(data, (err, doc) => {
  if(!err) {
    console.log(doc);
  } else {
    console.log(err);
  }
});
//我感觉还是这一种看着舒服(嘿嘿~~~~)
User.create(data)
  .then(doc => {
    console.log(doc);
  })
  .catch(err => {
    console.log(err);
  });

查询文档(数据)

//根据条件查找文档,如果条件为空则查询所有数据
//返回的是一个数组,数组里的每一项为一个对象
//查询名叫张三的
User.find({name: '张三'}).then(result => console.log(result));
//查找年龄大于20小于30的
User.find({age: {$gt: 20, $lt: 40}}).then(result => console.log(result));
// 返回的是一个对象,默认返回当前集合中的第一条文档
User.findOne({name: '张三'}).then(result => console.log(result));

//对查找到的数据进行处理

// 查询所有数据中的指定字段
User.find().select('name email -_id').then(result => console.log(result));
// 根据年龄字段进行升序排列
User.find().sort('age').then(result => console.log(result));
// 根据年龄字段进行降序排列
User.find().sort('-age').then(result => console.log(result));
// 查询的数据跳过前两条结果 限制显示5条结果,通常用于数据的分页显示
User.find().skip(2).limit(5).then(result => console.log(result));

删除文档(数据)

// 查找到一条文档并且删除
// 返回删除的文档,如果查询到多条文档,那么将会删除第一条
User.findOneAndDelete({name: '张三'}).then(result => console.log(result));
// 删除多条文档,没有条件则删除调所有的数据
User.deleteMany({}).then(result => console.log(result));

更新文档

// 更新一条数据
// 第一个参数:要更那条数据
// 第二个参数:更新那些内容
User.updateOne({name: '李四'}, {name: '李狗蛋' ,age: 28, }).then(result => console.log(result));
// 更新多个数据
User.updateMany({}, {age: 66}).then(result => console.log(result));

啦啦啦

const mongoose = require('mongoose');

mongoose.connect('mongodb://localhost/playground')
  .then(() => console.log('数据库连接成功'))
  .catch(err => console.log('数据库连接失败'))


let bookSchema = mongoose.Schema({
  name: {
    type: String,
    required: [true, '请输入书的名称'],
    minlength: [2, '名称长度不能少于2个字'],
    maxlength: [20, '文章长度不能大于20个字'],
    trim: true
  },
  author: {
    type: String,
    validate: {
      validator: value => {
        // 返回布尔值
				// true 验证成功
				// false 验证失败
        // value 要验证的值
        return value && value.length > 4
      },
      //自定义错误信息
      message: '不符合规定'
    }
  },
  category: {
    type: String,
    enum: {
      values: ['html', 'css', 'js'],
      message: '没有该类别'
    }
  },
  num: {
    type: Number,
    min: [0, '不能少于0本'],
    max: [100, '不能多于100本']
  },
  publishDate: {
    type: Date,
    default: Date.now
  } 
});

let Book = mongoose.model('Book', bookSchema);
Book.create({name: '  JavaScript程序设计 ', author: 'he', category: 'jss', num: 8,})
  .then(doc => console.log(doc))
  .catch(error => {
    // 获取错误信息对象
		const err = error.errors;
		// 循环错误信息对象
		for (var attr in err) {
			// 将错误信息打印到控制台中
			console.log(err[attr]['message']);
		}
  })
发布了61 篇原创文章 · 获赞 15 · 访问量 4076

猜你喜欢

转载自blog.csdn.net/qq_44162474/article/details/104221034