数据库(database) 数据库是一个仓库,在仓库中可以存放多个集合 集合(collection) 集合类似于数组,在集合中可以存放多个文档 文档(document) 数据库中的最小单位...集合名>.insertMany(doc) 插入多个文档 下面两个方法更像是第一个方法的拆分,但是下面两个语义更加清晰 插入文档时,如果没有给文档指定 _id 属性,则数据库会自动为文档添加 _id,可以自己指定..._id 该属性为文档的唯一标识,不可重复,根据时间戳+机器码生成 ObjectId(),确保数据唯一 // 向 test 数据库中 person 集合插入一个新数据 {name:"张三",age:"18...集合名>.drop() 删除集合 db.dropDatabase() 删除数据库 数据库中数据一般不会真正的删除,所以删除的方法很少调用 一般都是单独添加一个字段,表示数据是否删除 这种删除只是程序上的删除...- 商品 老师 - 学生 添加字段值为数组 11 插件操作数据库 大部分使用程序来完成数据库操作 Mongoose 让我们可以通过 Node 操作 MongoDB 模板 Mongoose 是对象文档模型
数据库(database) 数据库是一个仓库,在仓库中可以存放多个集合 集合(collection) 集合类似于数组,在集合中可以存放多个文档 文档(document) 数据库中的最小单位,存储和操作的内容都是文档...集合名>.insertMany(doc) 插入多个文档 下面两个方法更像是第一个方法的拆分,但是下面两个语义更加清晰 插入文档时,如果没有给文档指定 _id 属性,则数据库会自动为文档添加 _id,可以自己指定..._id 该属性为文档的唯一标识,不可重复,根据时间戳+机器码生成 ObjectId(),确保数据唯一 // 向 test 数据库中 person 集合插入一个新数据 {name:"张三",age:"18...集合名>.drop() 删除集合 db.dropDatabase() 删除数据库 数据库中数据一般不会真正的删除,所以删除的方法很少调用 一般都是单独添加一个字段,表示数据是否删除 这种删除只是程序上的删除...老师 - 学生 添加字段值为数组 11 插件操作数据库 大部分使用程序来完成数据库操作 Mongoose 让我们可以通过 Node 操作 MongoDB 模板 Mongoose 是对象文档模型(ODM)
3.5 文档的增删改查 插入文档 db.collection.insert(); insert() 可以用于向集合中添加一个或多个文档,可以传递一个对象,或一个数组。 ...可以将对象或数组中的对象添加进集合中,添加时如果集合或数据库不存在,会自动创建。 插入的文档对象会默认添加_id 属性,这个属性对应一个唯一的id,是该文档的唯一标识。...// $push 用于向数组中添加一个新的元素(即可以重复添加) // $addToSet 向数组中添加一个新元素,如果数组中已经存在了该元素,则不会添加(即不可以重复添加) db.users.update...比 Node 原生的 MongoDB 驱动更容易 4.3 新的对象 mongoose 中为我们提供了几个新的对象: Schema(模式对象) • Schema 对象定义约束了数据库中的文档结构。...4.5 Schema--模式对象(约束对象) 使用 Mongoose 你必须经常定义模式。 模式为集合中的文档定义字段和字段类型。
}) #mongoose基本使用 #mongoose的几个新的对象 在MongoDB中,多个Document可以组成Collection(以下简称集合),多个集合又可以组成数据库。...Schema—— 一种以文件形式存储的数据库模型骨架,无法直接通往数据库端,也就是说它不具备对数据库的操作能力,仅仅只是定义数据的类型,可以说是数据属性模型(传统意义的表结构),又或着是“集合”的模型骨架...mongoose中任何任何事物都是从Schema开始的。每一个Schema对应MongoDB中的一个集合(collection)。Schema中定义了集合中文档(document)的样式。...#创建model(集合) let personModel= mongoose.model('person', personSchema); person:数据库中的集合名称,当我们对其添加数据时如果person...MongoDB在命令行中的使用方法一样 //查询时只显示name personModel.find({}, {name: 1, _id: 0}, (err,data)=>{ if(!
在弹出的输入框中输入:/usr/local回车,如下: ? 将mongodb复制与此文件夹中。...// $all:查询指定字段包含所有指定内容的文档 await col.find({ tags: {$all:['热带','甜'] } } // $elemMatch: 指定字段数组中至少有一个元素满足所有查询规则...console.log('findByAuthor', r); 你还可以把这个方法作为静态属性直接绑定到 blogSchema上: // 定义静态方法 const BlogModel = mongoose.model...Keystone是以Express和MongoDB和mongoose为基础搭建的开源的Node.js CMS和web应用程序平台。...Keystone在官网上声称:在Node.js中,用Keystone搭建数据驱动的网站、应用程序和API是最容易的。
实际在数据库中产生的集合名为courses 2.创建文档 创建文档实际上就是向集合中插入数据。 方法1 分为两步: ①创建集合实例。 ②调用实例对象下的save方法将数据保存到数据库中。...: true }); // 调用实例对象下的save方法将数据保存到数据库中。...bin目录放置在环境变量中。...,可以设置当前字段的验证规则,验证失败则插入失败。...通常不同集合的数据之间是有关系的,例如文章信息和用户信息存储在不同集合中,但文章是某个用户发表的 要查询文章的所有信息包括发表用户,就需要用到集合关联。
实际在数据库中产生的集合名为courses 1.创建文档 创建文档实际上就是向集合中插入数据。 方法1 分为两步: ①创建集合实例。 ②调用实例对象下的save方法将数据保存到数据库中。...bin目录放置在环境变量中。...在项目根目录下输入以下命令导入 mongoimport -d 数据库名称 -c 集合名称 --file 要导入的数据文件 4.查询文档 find()方法 返回一组文档 // 根据条件查找文档(条件为空则查找所有文档...,可以设置当前字段的验证规则,验证失败则插入失败。...通常不同集合的数据之间是有关系的,例如文章信息和用户信息存储在不同集合中,但文章是某个用户发表的 要查询文章的所有信息包括发表用户,就需要用到集合关联。
现在已经有了 npm 的日志记录模块。这些模块可以将日志存储在不同格式或级别的文件中。我们将使用流行的ORM Mongoose 讨论 Node.js Express 程序中的 API 日志记录。...那么如何创建一个 Mongoose 插件,以更清洁的方式为你进行记录并简化 API 日志? Mongoose 中的插件是什么? 在 Mongoose 中,模式是可插入的。...Diff: 这是主要属性,它是两个 JSON 的 diff 如果你希望对自己的应用程序有意义,可以添加更多字段,也可以根据需要更改和升级架构。...isEqual:此方法支持比较数组、数组缓冲区、布尔值、日期对象、错误对象、映射、数字、对象、正则表达式、集合、字符串、符号和类型化数组。...你还可以通过在架构模型中初始化它来将其用于特定架构。 const mongoose = require('mongoose') mongoose.plugin(require('.
分为两步: 创建集合实例。 调用实例对象下的save方法将数据保存到数据库中。...数据库的所有操作都是异步操作 1.使用create方法创建文档 通过回调函数的方法获取异步API // 向集合中插入文档 Course.create({ name: 'JavaScript',...mongoose验证 在创建集合规则时,可以设置当前字段的验证规则,验证失败就则输入插入失败。...1.7 集合关联 通常不同集合的数据之间是有关系的,例如文章信息和用户信息存储在不同集合中,但文章是某个用户发表的,要查询文章的所有信息包括发表用户,就需要用到集合关联。...连接数据库,创建用户集合,向集合中插入文档 当用户访问/list时,将所有用户信息查询出来 实现路由功能 呈现用户列表页面 从数据库中查询用户信息 将用户信息展示在列表中
MongoDB是一款流行的文档型数据库,可以在Node.js中使用官方的MongoDB包或者第三方包mongoose进行操作。...在进行增删改查操作时,通常都需要连接 MongoDB 数据库。在 Node.js 中,可以使用官方的 mongodb 包或者第三方的 mongoose 包来操作 MongoDB 数据库。...设计 Schema 时需要指定集合(表)中每个字段的数据类型和约束条件,例如字段类型可以是 String、Number、Date、Boolean 等,约束条件可以是 required(必填项)、unique...发布 Model 时,需要将 Schema 传入 mongoose.model() 方法中,生成集合(表)的构造函数。...在Node.js中,我们可以使用MongoDB官方提供的mongodb包来操作数据库,也可以使用第三方包mongoose,mongoose对mongodb进行了二次封装,使用起来更加方便。
数据库概述及环境搭建 1.1 为什么要使用数据库 动态网站中的数据都是存储在数据库中的 数据库可以用来持久存储客户端通过表单收集的用户信息 数据库软件本身可以对数据进行高效的管理 http...1.5 数据库相关概念 在一个数据库软件中可以包含多个数据仓库,在每个数据仓库中可以包含多个数据集合,每个数据集合中可以包含多条文档(具体的数据)。...术语 解释说明 database 数据库,mongoDB数据库软件中可以建立多个数据库 collection 集合,一组数据的集合,可以理解为JavaScript中的数组 document 文档,一条具体的数据...,可以理解为JavaScript中的对象 field 字段,文档中的属性名称,可以理解为JavaScript中的对象属性 1.6 Mongoose第三方包 使用Node.js操作MongoDB数据库需要依赖...1.8 数据库连接 使用mongoose提供的connect方法即可连接数据库。
每个 schema 映射到 MongoDB 的集合(collection)和定义该集合(collection)中的文档的形式。...如果不需要该版本号,在 schema 中添加{ versionKey: false}即可。 创建模型 使用我们的 schema 定义,我们需要将我们的userSchema转成我们可以用的模型。...因为这是一个重大的改变,添加了 useNewUrlParser 标记如果在用户遇到 bug 时,允许用户在新的解析器中返回旧的解析器。...看完Models,最后让我们来看下在实战中比较有用的Populate 联表(Populate) Mongoose 的 populate() 可以连表查询,即在另外的集合中引用其文档。...refs 创建 Model 的时候,可给该 Model 中关联存储其它集合 _id 的字段设置 ref 选项。
mongoose 核心概念 schema 约束字段/列数据 model模型 对应 集合 后期用它来实现数据增删改查 简介 安装 npm i mongoose schema 英文网: http://mongoosejs.com...中文网: http://mongoosejs.net/ 作用:用来约束MongoDB文档数据(哪些字段必须,哪些字段可选的) model 一个模型对应一个集合。...后面通过模型管理集合中的数据。...body-parser模块接收前端传来的数据 2.定义路由 分模块开发,将路由的方法写在/constroller/stu.js文件中。...constroller/stu.js文件中,导入模型,调用模型中的方法完成逻辑的编写,最后导出。
1.数据库概述及环境搭建 1.1为什么要使用数据库 动态网站中的数据都是存储在数据库中的 数据库可以用来持久存储客户端通过表单收集的用户信息 数据库软件本身可以对数据进行高效的管理 1.2...1.5数据库相关概念 在一个数据库软件中可以包含多个数据仓库,在每个数据仓库中可以包含多个数据集合,每个 数据集合中可以包含多条文档(具体的数据)。...术语 解释说明 database 数据库,mongoDB数据库软件中可以建立多个数据库 collection 集合,一组数据的集合,可以理解为JavaScript中的数组 document 文档,一条具体的数据...,可以理解为JavaScript中的对象 field 字段,文档中的属性名称,可以理解为JavaScript中的对象属性 1.6 Mongoose第3三方包 使用Nodejs操作MongoDB数据库需要依赖...'数据库连接成功')) .catch(err => console.log('数据库连接失败', err)); 连接数据库时如果提示如下信息,在content方法里面添加第二个参数, {
2. mongoose 2.1 安装 npm i mongoose -S 2.2 使用 在 node.js 里采用的是CommonJS[4]的规范,需要我们采用 require 的方法来引入需要的包。...2.4 Schema 定义 Schema 来说其实是用来定义文档的基本字段和集合,也可以理解为表结构的定义。Schema 是与数据无关的 并不能直接操作数据库。...:'user'}) 在 mongoose 中,提供了 Schema 的类,我们可以在实例化的时候先定义mongoose.Schema,以免后续总是要出现丑陋的new mongoose.Schema()。...,第一种写法是遵循 node 的开发习惯,callback中的第一个参数永远是错误信息,第二个参数是正确信息。...第二种写法是返回promise 上述定义 model 的方法是通过 model 类创建的,还有一种创建 model 的方法是通过实例创建,这个创建出来的是一个操作对象,代表是一个单个文档只能操作自己。
# mongoDB基本组成 数据库(database):数据库是一个仓库,在仓库中可以存放集合。...集合(collection):集合类似于数组,在集合中可以存放文档。 文档(document):文档数据库中的最小单位,我们存储和操作的内容都是文档。...({name:"html5"}); //7.向数据库colleges集合中的name为Html5的文档,添加一个intro属性,属性值为"打通全栈任督二脉!".../12.向name为Html5的文档中,添加一个新的核心课程 "微信小程序" //$push 用于向数组中添加一个新的元素 //$addToSet 向数组中添加一个新元素 , 如果数组中已经存在了该元素...mongoose的相关概念 mongoose中提供了几个新的对象: + Schema(模式对象):Schema对象定义约束了数据库中的文档结构 + Model:Model对象作为集合中的所有文档的表示
是否必须 是否重复 默认值 等,如下定义了一个用户表结构 注意:如果定义表结构时没有定义_id,mongoose会自己添加一个该字段,该字段不会重复,类型为ObjectId,通过findById()查询...添加`createdAt updatedAt`创建时间和更新时间两个字段 } ); 如果在定义了结构后需要添加新字段,在实例上使用add()方法 创建表model 通过mongoose.model...= mongoose.model("User", userSechem); ---- 通过上面的操作就获得了表的构造函数,接下来就可以向里面进行增删改查了 增 有三种方法在表内增加数据: 通过实例化数据...: 创建表数据实例化model 通过传入具体的数据来实例化表,能获得一条具体的表数据,类型为Mongoose Documents,向数据库中查找到的也是这种类型数据 const user = new User...方法: 通过表构造器的静态方法create自动在表中插入新的数据 该方法可以接收多个插入数据,最后的回调函数参数根据数据量决定 该方法支持两种调用: 错误优先的回调 async await const
5、mongoose验证 在创建集合规则时,可以设置当前字段的验证规则,验证失败就则输入插入失败。...required: true 必传字段 minlength:3 字符串最小长度 maxlength: 20 字符串最大长度 min: 2 数值最小为2 max: 100 数值最大为100 enum: [...// 默认值 default: Date.now }, category: { type: String, // 枚举 列举出当前字段可以拥有的值...通常不同集合的数据之间是有关系的,例如文章信息和用户信息存储在不同集合中,但文章是某个用户发表的,要查询文章的所有信息包括发表用户,就需要用到集合关联。...使用id对集合进行关联 使用populate方法进行关联集合查询 集合关联实现 // 用户集合 const User = mongoose.model('User', new mongoose.Schema
本文源自工作中的一个问题,在使用 Mongoose 做关联查询时发现使用 populate() 方法不能直接关联非 _id 之外的其它字段,在网上搜索时这块的解决方案也并不是很多,在经过一番查阅、测试之后...$lookup.foreignFiled: 被 Join 的集合的字段,本示例中是 Books 表的 bookId 字段。 $as: 别名,关联查询返回的这个结果起一个新的名称。..._id 字段,并且在 populate 方法里无法更改的,但是在 Mongoose 4.5.0 之后增加了虚拟值填充[3],以便实现文档中更复杂的一些关系。...可以在创建 Schema 时在第二个参数 options 中设置,也可以使用创建的 Schema 对象的 set 方法设置。...另外一种是 Mongoose 提供的 populate 方法,这种方式写起来,代码会更简洁些,这里需要注意如果关联的字段是非 _id 字段,一定要在 Schema 中设置虚拟值填充,否则 populate
关系型数据库的解决思路: 需要添加一张喜欢表: favorite,里面两个字段:articleId和userId,表述的意思是:xx文章被xxx些用户喜欢了。文章和喜欢的用户为多对多关系。...非关系型数据库的解决思路: 在文章的Collection中增加一个SubCollection,SubCollection中可以存放用户信息,如用户名,只要有用户喜欢了文章,在这篇文章的文档中的子文档下插入一条记录即可...通过查找资料我的总结如下: 如果只需要通过A集合查询B集合,而不需要反过来查询,也就是单向的关系(如文章和评论,只需要展示文章的时候,将其评论展示即可),那么可以在A集合中建立一个子集合B。...如果既需要通过A查询B,又需要通过B查询A(如作者和文章,需要查询某作者下的所有文章,展示文章的时候,有需要展示作者的相关信息),那么可以在子集合中通过一个唯一字段关联父集合。...在articleSchema中增加一个字段_user,类型为Schema.Types.ObjectId,关联User: _user: { type: Schema.Types.ObjectId,