热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

monogoDB简单使用(增、删、改、查、更新等),Go语言社区,Golang程序员人脉社

文章目录

    • 准备工作
    • 数据库的相关概念
    • 与数据库进行连接
    • 创建集合
    • 创建文档(具体数据)
    • 查询文档(数据)
    • 删除文档(数据)
    • 更新文档
    • 啦啦啦


准备工作

首先需要确保已经启动了 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也不会看到这个数据库,因为里面没有集合(也就是没有数据)


创建集合

创建集合可以分为两步:

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']);
}
})



推荐阅读
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • 本文总结了在开发中使用gulp时的一些技巧,包括如何使用gulp.dest自动创建目录、如何使用gulp.src复制具名路径的文件以及保留文件夹路径的方法等。同时介绍了使用base选项和通配符来保留文件夹路径的技巧,并提到了解决带文件夹的复制问题的方法,即使用gulp-flatten插件。 ... [详细]
  • 如何在php中将mysql查询结果赋值给变量
    本文介绍了在php中将mysql查询结果赋值给变量的方法,包括从mysql表中查询count(学号)并赋值给一个变量,以及如何将sql中查询单条结果赋值给php页面的一个变量。同时还讨论了php调用mysql查询结果到变量的方法,并提供了示例代码。 ... [详细]
  • Redis底层数据结构之压缩列表的介绍及实现原理
    本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
  • 在springmvc框架中,前台ajax调用方法,对图片批量下载,如何弹出提示保存位置选框?Controller方法 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • 本文讨论了如何在codeigniter中识别来自angularjs的请求,并提供了两种方法的代码示例。作者尝试了$this->input->is_ajax_request()和自定义函数is_ajax(),但都没有成功。最后,作者展示了一个ajax请求的示例代码。 ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • 本文记录了在vue cli 3.x中移除console的一些采坑经验,通过使用uglifyjs-webpack-plugin插件,在vue.config.js中进行相关配置,包括设置minimizer、UglifyJsPlugin和compress等参数,最终成功移除了console。同时,还包括了一些可能出现的报错情况和解决方法。 ... [详细]
  • VueCLI多页分目录打包的步骤记录
    本文介绍了使用VueCLI进行多页分目录打包的步骤,包括页面目录结构、安装依赖、获取Vue CLI需要的多页对象等内容。同时还提供了自定义不同模块页面标题的方法。 ... [详细]
author-avatar
Bd专业8楼nv
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有