versionKey 是一个字符串,代表版本号的属性名, 默认值为 __v 如果设置了 timestamps 选项, mongoose 会在你的 schema 自动添加 createdAt 和 updatedAt...在 mongoose 中有两种指定方式,字符串指定和对象形式指定。 字符串指定时在排除的字段前加 - 号,只写字段名的是包含。...如果没有操作符或操作符不是 update 操作符,统一被视为 set 操作(mongoose 特有)字段相关操作符符号描述set设置字段值currentDate设置字段值为当前时间,可以是 Date 或时间戳格式...each修饰 push 和 addToSet 操作符,以便为数组字段添加多个元素。...fields/select:指定返回的字段。 sort:如果查询条件找到多个文档,则设置排序顺序以选择要更新哪个文档。 maxTimeMS:为查询设置时间限制。
那么如何创建一个 Mongoose 插件,以更清洁的方式为你进行记录并简化 API 日志? Mongoose 中的插件是什么? 在 Mongoose 中,模式是可插入的。...插件就像一个函数,你可以在模式中使用它,并在模式实例上一次次地重用。 Mongoose 还提供全局插件,你可以将其用于所有模式。...Diff: 这是主要属性,它是两个 JSON 的 diff 如果你希望对自己的应用程序有意义,可以添加更多字段,也可以根据需要更改和升级架构。...isEqual:此方法支持比较数组、数组缓冲区、布尔值、日期对象、错误对象、映射、数字、对象、正则表达式、集合、字符串、符号和类型化数组。...步骤4:用法 - 如何在express.js API中使用 在你的主server.js或app.js中: 初始化全局 plugin 【https://mongoosejs.com/docs/plugins.html
特点 请求你所要的数据,不多不少; 如: hero 中有 name, age, sex 等,可以只取得需要的字段。...自定义类型查询 我们前面的查询中,已经将 hero 字段定义为 String 类型,但是常常开发中,我们又会碰到字段是多个类型,即字段也能指代对象类型(Object),比如一个 user 字段会有 name...、 age 等字段,而 name 返回字符串类型, age 返回数值类型。...另外,我们可以使用 [类型] 来表示一类数组,如: [Int] 表示整型数组; [String] 表示字符串型数组; 2....为了方便测试,我们在 chrome 浏览器控制台的 application 下,手动设置一个含有 auth 字符串的一个 cookies ,只是测试使用哦。 设置完成后,我们就能正常进入页面。
文档内嵌与引用模式 MongoDB 是一种文档对象模型,使用起来很灵活,它的文档结构分为 内嵌和引用 两种类型。...图片来源:mongoing[1] 引用模型示例 JSON 模型 我们通过作者和书籍的关系,一个作者对应多个书籍这样一个简单的示例来学习如何在 MongoDB 中实现关联非 _id 查询。...virtual, 下面的一些参数和 $lookup 是一样的,个别参数做下介绍: ref: 表示的要 Join 的集合的名称,同 $lookup.from justOne: 默认为 false 返回多条数据,如果设置为...即可对字段设置别名,还可以使用 unwind 等关键字对数据做二次处理。...另外一种是 Mongoose 提供的 populate 方法,这种方式写起来,代码会更简洁些,这里需要注意如果关联的字段是非 _id 字段,一定要在 Schema 中设置虚拟值填充,否则 populate
其它事件可以自行查看:http://mongoosejs.com/docs/api.html#connection_Connection 这是最简单的连接字符串,当然还有其它形式,比如:连接密码、数据库连接设置...里会用到的一种数据模式,可以理解为表结构的定义;每个schema会映射到mongodb中的一个collection,它不具备操作数据库的能力 我们先改造一下db.js,导出mongoose对象 ...{ console.log("Res:" + res); } }) } getByConditions(); 结果我就不展示了 第2个参数可以设置要查询输出的字段...,设置方法如上,1表示查询输出该字段,0表示不输出 比如我要查询年龄范围条件应该怎么写呢? ...(基于LBS) $exists 字段是否存在 $elemMatch 匹配内数组内的元素 $within 范围查询(基于LBS) $box 范围查询,矩形范围(基于LBS)
console.log("链接成功"); }); 创建表结构Schema Schema相当于MySql的表结构 通过定义Schema来约束数据的类型,支持以下类型数据 类型 作用 String 定义字符串...Map 约束能用对象的方法描述数据类型 是否必须 是否重复 默认值 等,如下定义了一个用户表结构 注意:如果定义表结构时没有定义_id,mongoose会自己添加一个该字段,该字段不会重复,类型为ObjectId...添加`createdAt updatedAt`创建时间和更新时间两个字段 } ); 如果在定义了结构后需要添加新字段,在实例上使用add()方法 创建表model 通过mongoose.model...(name,sechem)来创建表结构构造器,通过传入数据来实例化构造器获得具体的表 注意:在这一步的时候数据库已经有了表,表名全是小写且表明为name加上s,如这里会创建表users const User...: 创建表数据实例化model 通过传入具体的数据来实例化表,能获得一条具体的表数据,类型为Mongoose Documents,向数据库中查找到的也是这种类型数据 const user = new User
返回文档集合(数组形式) [{ _id: 5c0917ed37ec9b03c07cf95f, name: 'node.js基础', author: 'xc-dh‘ },{ ...字段前加上-表示不查询此字段 // User.find().select('name age -_id').then(result => { // console.log(result);...,可以设置当前字段的验证规则,验证失败则插入失败。...required: true必传字段 minlength: 3字符串最小长度 maxlength: 20字符串最大长度 min: 2数值最小为2 max: 100数值最大为100...mongoose.Schema({ title: { type: String, // 必传字段,不传就会报错 required: [true,
2.5 配置 MongoDB 的 windows 服务 将 MongoDB 设置为系统服务,可以自动在后台启动,不需要每次都手动启动。...;-1 表示降序显示该字段的数据,0 表示不显示该字段的数据。...比 Node 原生的 MongoDB 驱动更容易 4.3 新的对象 mongoose 中为我们提供了几个新的对象: Schema(模式对象) • Schema 对象定义约束了数据库中的文档结构。...4.5 Schema--模式对象(约束对象) 使用 Mongoose 你必须经常定义模式。 模式为集合中的文档定义字段和字段类型。 ...如果你的数据是被结构化成支持模式的,这是非常有用的。 简单来说,模式就是对文档的约束,有了模式,文档中的字段必须符合模式的规定。否则将不能正常操作。
) Course.find().then(result => console.log(result)) // 返回文档集合(数组形式) [{ _id: 5c0917ed37ec9b03c07cf95f...字段前加上-表示不查询此字段 // User.find().select('name age -_id').then(result => { // console.log(result);...,可以设置当前字段的验证规则,验证失败则插入失败。...required: true必传字段 minlength: 3字符串最小长度 maxlength: 20字符串最大长度 min: 2数值最小为2 max: 100数值最大为100...mongoose.Schema({ title: { type: String, // 必传字段,不传就会报错 required: [true,
限流 为了避免请求泛滥,给 API 设置速度限制很重要。为此 RFC 6585 引入了 HTTP 状态码429(too many requests)。加入速度设置之后,应该给予用户提示。...上面说了这么多,下面让我们看一下如何在 Koa 中践行RESTful API最佳实践吧。...它是一个很长的字符串,中间用点(.)分隔成三个部分。...,为它们一个个写路由就很麻烦,也没必要。koa-static模块封装了这部分的请求。...在这里主要是以用户模块的crud为例来展示下如何在 koa 中践行RESTful API最佳实践。
.remove({条件}) 删除符合条件的所有文档,第二个参数为 true 只删除一个 条件必须设置,如果没有直接删除所有文档 db....多对多(many to many) 分类 - 商品 老师 - 学生 添加字段值为数组 11 插件操作数据库 大部分使用程序来完成数据库操作 Mongoose 让我们可以通过 Node 操作 MongoDB...模板 Mongoose 是对象文档模型(ODM)库,对原生的模块进行了封装,提供了更多的功能 Mongoose 优势 官方地址:http://www.mongoosejs.net/ 可以为文档创建一个模式结构...否则连接不会断开 Mongoose 对象 Schema(模式对象) 定义约束了数据库中的文档结构 Model Model 对象作为集合中的所有文档表示 相当于 MongoDB数据库中的集合collection...Document 表示集合中的具体文档 Schema 对象 const Schema = mongoose.Schema; // 创建 Schema(模式)对象 let stuSchema = new
.remove({条件}) 删除符合条件的所有文档,第二个参数为 true 只删除一个 条件必须设置,如果没有直接删除所有文档 db....多对多(many to many) 分类 - 商品 老师 - 学生 添加字段值为数组 11 插件操作数据库 大部分使用程序来完成数据库操作 Mongoose 让我们可以通过 Node 操作 MongoDB...模板 Mongoose 是对象文档模型(ODM)库,对原生的模块进行了封装,提供了更多的功能 Mongoose 优势 官方地址:http://www.mongoosejs.net/ 可以为文档创建一个模式结构...,否则连接不会断开 Mongoose 对象 Schema(模式对象) 定义约束了数据库中的文档结构 Model Model 对象作为集合中的所有文档表示 相当于 MongoDB数据库中的集合...collection Document 表示集合中的具体文档 Schema 对象 const Schema = mongoose.Schema; // 创建 Schema(模式)对象 let stuSchema
5、mongoose验证 在创建集合规则时,可以设置当前字段的验证规则,验证失败就则输入插入失败。...required: true 必传字段 minlength:3 字符串最小长度 maxlength: 20 字符串最大长度 min: 2 数值最小为2 max: 100 数值最大为100 enum: [...[‘字段名称’].message // 引入mongoose第三方模块 用来操作数据库 const mongoose = require('mongoose'); // 数据库连接 mongoose.connect...({ title: { type: String, // 必选字段 required: [true, '请传入文章标题'], //...字符串的最小长度 minlength: [2, '文章长度不能小于2'], // 字符串的最大长度 maxlength: [5, '文章长度最大不能超过
同时它也是一个对象数据库,没有表、行等概念,也没有固定的模式和结构,所有的数据以文档的形式存储(文档,就是一个关联数组式的对象,它的内部由属性组成,一个属性对应的值可能是一个数、字符串、日期、数组,甚至是一个嵌套的文档...MongoDB —— 是一个对象数据库,没有表、行等概念,也没有固定的模式和结构,所有的数据以Document(以下简称文档)的形式存储(Document,就是一个关联数组式的对象,它的内部由属性组成,...一个属性对应的值可能是一个数、字符串、日期、数组,甚至是一个嵌套的文档。)... : { type:String },//属性name,类型为String age : { type:Number, default:0 },//属性age,类型为Number,默认为0 time ...)、null、数组、内嵌文档等。
ID类型代表着一个独一无二的标识,ID 类型最终会被转化成String类型,但它必须是独一无二的,例如 mongodb 中的 _id 字段就可以设置为ID类型。...如果我们的某个字段返回不止一个标量类型的数据,而是一组,则需要使用List类型声明,在该标量类型两边使用中括号[]包围即可,与 JavaScript 中数组的写法相同,而且返回的数据也将会是数组类型。...,并且结果为Song类型时选取artist字段,结果为Video类型时选取performers字段。...当然你还可以单独为name字段使用独立的 Resolver 进行解析。后面的代码例子中将会清楚地了解 Resolver。...前面讲到 Resolver 的时候说到,每个字段都可以对应一个 Resolver 函数,我们分别对 movies 和 actors 字段设置 Resolver 函数,将上一个 Resolver 解析出来的
name属性 3.添加实现学生信息功能路由 4.接收客户端传递过来的学生信息 5.将学生信息添加到数据库中 6.将页面重定向到学生信息列表页面 6.学生信息列表页 1.从数据库中将所有的学生信息查询出来.../route/index'); // 实现静态资源访问服务 参数为路径 返回值为方法 const serve = serveStatic(path.join(__dirname, 'public'));...= require('mongoose'); // 创建学生集合规则 const studentsSchema = new mongoose.Schema({ name: { ...''; req.on('data', param => { formData += param; }); // querystring.parse()方法,能把字符串转换成对象模式...-- 爱好是数组形式,要循环 --> {{each $value.hobbies}} {{$value}}
1.4 查询文档 // 根据条件查找文档(条件为空则查找所有文档) Course.find().then(result => console.log(result)) ?...result)); 返回一个数组 // 根据条件查找文档 Course.findOne({name: 'node.js基础'}).then(result => console.log(result))...mongoose验证 在创建集合规则时,可以设置当前字段的验证规则,验证失败就则输入插入失败。...required: true 必传字段 minlength:3 字符串最小长度 maxlength: 20 字符串最大长度 min: 2 数值最小为2 max: 100 数值最大为...default: 默认值 获取错误信息:error.errors['字段名称'].message // 创建集合规则 const postSchema = new mongoose.Schema(
,为此属性添加require验证器 default: 任何值或函数 设置此路径默认值,如果是函数m,函数返回值为默认值 select: 布尔值 指定query的默认projections validate...Mongoose子文档有两种不同的概念:子文档数组和单个嵌套子文档 const chidlSchema = new Schema({name:String}) const parentSchema...storySchema) const Person = mongose.model('Person',personSchema) 我们创建了两个model,Person model中的 stories 字段为...ObjectID 数组,ref 选项告诉mongoose 在填充的时候使用哪个 model,上面的例子就是指 Story 的 model。...story){ if (err) return handleError(err); console.log('The author is %s', story.author.name); }) 设置被填充字段
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。 ?...mongoose Mongoose:一款为异步工作环境设计的 MongoDB 对象建模工具。...Schema 可以定义每个文档中存储的字段,及字段的验证要求和默认值。 mongoose.model() 方法将模式“编译”为模型。模型就可以用来查找、创建、更新和删除特定类型的对象。...这些文档包含 Schema 模型定义的字段名/模式类型。...mongoose 获取内嵌数组的长度,有没有更好的办法,或者说是既能返回总数也能进行分页? 订单是在数据中库存了的,没有展示,收货地址也只有增加。这两处都可以扩展增删改查的功能。
领取专属 10元无门槛券
手把手带您无忧上云