如果值为真,为此属性添加require验证器 default: 任何值或函数 设置此路径默认值,如果是函数m,函数返回值为默认值 select: 布尔值 指定query的默认projections validate...-SubDocuments 子文档是指嵌套在另一个文档中的文档。...Mongoose子文档有两种不同的概念:子文档数组和单个嵌套子文档 const chidlSchema = new Schema({name:String}) const parentSchema...Model的多个静态辅助方法都可以查询文档 Query实例有一个.then()函数,用法类似Promise 我们看一下demo,查询persons表中name中属性last为Ghost值的文档,只查询...join 聚合操作,那就死$lookup,而 mongoose 拥有更强大的 populate,可以让你在别的 collection 中引用 document。
到这里,已经基本介绍完了Schema,接下来看一下SchemaTypes 模式类型(SchemaTypes) SchemaTypes为查询和其他处理路径默认值,验证,getter,setter,字段选择默认值...default: 任意类型或函数,为路径设置一个默认的值。如果值是一个函数,则函数的返回值用作默认值。...定义一个具有给定名称的虚拟属性,该名称可以获取/设置这个路径 索引 你可以用 schema 类型选项声明 MongoDB 的索引。 index: 布尔值,是否在属性中定义一个索引。...({name:'森林'})对比相关操作符符号描述eq与指定的值相等ne与指定的值不相等gt大于指定的值gte大于等于指定的值lt小于指定的值lte小于等于指定的值in与查询数组中指定的值中的任何一个匹配...nin与查询数组中指定的值中的任何一个都不匹配Model.find({ age: { in: [18, 24]} })返回 age 字段等于 18 或者 24 的所有 document。
GraphQL 对你的 API 中的数据提供了一套易于理解的完整描述,使得客户端能够准确地获得它需要的数据,而且没有任何冗余,也让 API 更容易地随着时间推移而演进,还能用于构建强大的开发者工具。...特点 请求你所要的数据,不多不少; 如: hero 中有 name, age, sex 等,可以只取得需要的字段。...便于维护,根据需求平滑演进,添加或隐藏字段; GraphQL 使用类型来保证应用只请求可能的数据,还提供了清晰的辅助性错误信息。应用可以使用类型,而避免编写手动解析代码。 2....GraphQL 查询能够遍历相关对象及其字段,使得客户端可以一次请求查询大量相关数据,而不像传统 REST 架构中那样需要多次往返查询。...值为对象,每个属性名为键名,值也是对象,其中 type属性的值为 graphql 中的属性,下面会补充 补充: fields 属性中的子属性的类型通常有: graphql.GraphQLString
上面说了这么多,下面让我们看一下如何在 Koa 中践行RESTful API最佳实践吧。...拿到路由分配的任务并执行 在 koa 中是一个中间件 为什么要用控制器 获取 HTTP 请求参数 Query String,如?...服务器完全只靠这个对象认证用户身份。为了防止用户篡改数据,服务器在生成这个对象的时候,会加上签名。 服务器就不保存任何 session 数据了,也就是说,服务器变成无状态了,从而比较容易实现扩展。...简单的说,Mongoose就是对node环境中MongoDB数据库操作的封装,一个对象模型(ODM)工具,将数据库中的数据转换为JavaScript对象以供我们在应用中使用。...在这里主要是以用户模块的crud为例来展示下如何在 koa 中践行RESTful API最佳实践。
数据库,网站系统最重要的部分之一,它好比一个人的大脑,可以记下开发者们想让它记下任何的事情,而且它比人脑更可靠更精准。 ?..., time: Date, }); // 定义数据模型,模型即可直接操作数据,如创建查询更新删除等。...接着定义了一个模型Model,Model即可理解为暴露出的一张表的操作对象,如新增查找更新删除等都在Model上,例子中的Model就是操作person表的操作对象,它里面有find,create等一些方法...还有最大的亮点就是支持SQL语句了,有了SQL语句很多复杂的查询都可以被实现,如多个表之间的操作便可以通过一个SQL语句实现,非常便捷。...开关接口只需要存储当前数据接口处于那种模式,是一种状态值,在某一时刻只处于一种状态 ,所以这里适合使用FileDB就记录状态。c.
数据库,网站系统最重要的部分之一,它好比一个人的大脑,可以记下开发者们想让它记下任何的事情,而且它比人脑更可靠更精准。..., time: Date, }); // 定义数据模型,模型即可直接操作数据,如创建查询更新删除等。...接着定义了一个模型Model,Model即可理解为暴露出的一张表的操作对象,如新增查找更新删除等都在Model上,例子中的Model就是操作person表的操作对象,它里面有find,create等一些方法...还有最大的亮点就是支持SQL语句了,有了SQL语句很多复杂的查询都可以被实现,如多个表之间的操作便可以通过一个SQL语句实现,非常便捷。...开关接口只需要存储当前数据接口处于那种模式,是一种状态值,在某一时刻只处于一种状态 ,所以这里适合使用FileDB就记录状态。c.
1.4 Schema.Types NodeJS中的基本数据类型都属于Schema.Type,另外Mongoose还定义了自己的类型 //举例: var ExampleSchema =...张表有主外关系,Mongoose将2个Document的嵌套叫做Sub-Docs(子文档) 简单的说就是一个Document嵌套另外一个Document或者Documents: var ChildSchema1...'not-x'}}); parent.save(function(err){ console.log(err.message); //#err:not-x }); 4.1 查询子文档... 如果children是parent的子文档,可以通过如下方法查询到children var child = parent.children.id(id); 4.2 新增、删除、更新 子文档是父文档的一个属性...,请查询API 6.1.2 链式查询 在查询时候,不带回调,而查询条件通过API函数来制定,例如: var query = PersonModel.findOne({'name.last':
mongoimport路径 命令行执行 mongoimport -d playground(数据库名称) -c users(集合名称) --file ..../user.json(导入文件) 查询文档 // 引入mongoose第三方模块 用来操作数据库 const mongoose = require('mongoose'); // 数据库连接 mongoose.connect...('User', userSchema); // 查询用户集合中的所有文档 User.find().then(result => console.log(result)); // 通过_id字段查找文档...({age: {$gt: 20, $lt: 40}}).then(result => console.log(result)) // 查询用户集合中hobbies字段值包含足球的文档 // User.find...// true 验证成功 // false 验证失败 // v 要验证的值 return v && v.length > 4 }, // 自定义错误信息 message: '传入的值不符合验证规则
查询一个符合条件的文档对象的属性值(该方法常用) db.users.findOne({age:25}).length(); // 查询一个符合条件的文档对象的属性值(该方法不常用) 删除文档 db.collection.remove...如果需要修改指定的值,而不是替换,需要使用【修改操作符】来完成修改。..."}, {$set: {age: 10}}); // 替换旧的文档对象中某个属性的值(只替换符合条件的第一个文档对象) db.users.update({username:..."}, {$set: {age: 10}}); // 替换旧的文档对象中某个属性的值(只替换符合条件的第一个文档对象) db.users.updateMany({username: "sunwukong...而 Mongoose 就是一个让我们可以通过 Node 来操作 MongoDB 的模块。
mongod --dbpath=文件夹路径 4.启动mongodb, mongo 连接mongodb数据库的命令: 1.进入MongoDB下的bin文件夹下--cd 路径 2.命令--mongod...--dbpath=C:\Users\lx\Desktop\Node\MongoDB\DB 3.再打开一个cmd 4.重复第一步--cd 路径 5.命令--mongo const mongoose...= require('mongoose'); let db=mongoose.connect('mongodb://localhost/tenDB', {useNewUrlParser: true}...:"String",default:"未知"}, },{ collection:"person" }); //利用集合生成模板,接下来,所有的数据库的操作,如增删查改全部由该模型负责...student where age not between 24 and 25 7.根据多个条件中的某个条件, 进行查找 select * from student where 字段1 = 值1 or
非关系型数据库的解决思路: 在文章的Collection中增加一个SubCollection,SubCollection中可以存放用户信息,如用户名,只要有用户喜欢了文章,在这篇文章的文档中的子文档下插入一条记录即可...通过查找资料我的总结如下: 如果只需要通过A集合查询B集合,而不需要反过来查询,也就是单向的关系(如文章和评论,只需要展示文章的时候,将其评论展示即可),那么可以在A集合中建立一个子集合B。...如果既需要通过A查询B,又需要通过B查询A(如作者和文章,需要查询某作者下的所有文章,展示文章的时候,有需要展示作者的相关信息),那么可以在子集合中通过一个唯一字段关联父集合。...而Mongoose的解决方法是在数据库的定义时就可以将这些信息定义好。这可能也就是约定优于配置(convention over configuration)的好处吧!...关于NodeJS中数据库的知识,就写这么多了,想要更多的了解有关Mongoose的用法,请参考官方文档:Mongoosejs Guide。文档写得非常详细! Have a good luck~
db.colleges.find({name:"html5"}); //7.向数据库colleges集合中的name为Html5的文档,添加一个intro属性,属性值为"打通全栈任督二脉!"...); //32.索引:在部分需求中, 有时候我们只需要一个文档中的部分数据, 这时候就得通过映射在查询时, 可以在第二个参数来设置查询的结果投影 db.section.find({}, {name:...而Mongoose就是一个让我们可以通过Node来操作MongoDB的模块。...,相当于MongoDB数据库中的集合collection + Document: Document表示集合中的具体文档 mongoose使用步骤 1.下载安装Mongoose: npm i mongoose...chat: "路飞是要成为海贼王的男人 " }, { name: "娜美", age: 21, chat: "遇到迷茫时,任何人都会变得软弱
那么如何创建一个 Mongoose 插件,以更清洁的方式为你进行记录并简化 API 日志? Mongoose 中的插件是什么? 在 Mongoose 中,模式是可插入的。...Message: 你可以在此处包含你想要显示的任何类型的消息,这些消息在调试过程中有意义或有帮助。...对象通过它们自己的方法比较,而不是通过继承的、可枚举的属性进行比较。函数和 DOM 节点则进行严格相等的比较,即使用 ===。 这里我们迭代每个对象的属性和值,并将它与旧对象进行比较。...如果当前对象的 value 不等于前一个对象中相同属性的值:base[key] 如果该值是对象本身,我们递归调用函数changes 直到它得到一个值,它最终将作为 result[key]=value 存储在...步骤4:用法 - 如何在express.js API中使用 在你的主server.js或app.js中: 初始化全局 plugin 【https://mongoosejs.com/docs/plugins.html
如果查询有任何复杂的子查询,则最外层标记为PRIMARY(DERIVED、UNION、UNION RESUlT) table 访问引用哪个表(引用某个查询,如“derived3”) type 数据访问/...key_len 显示mysql在索引里使用的字节数 ref 显示了之前的表在key列记录的索引中查找值所用的列或常量 rows 为了找到所需的行而需要读取的行数,估算值,不精确。...通过把所有rows列值相乘,可粗略估算整个查询会检查的行数 Extra 额外信息,如using index、filesort等 id id是用来顺序标识整个查询中SELELCT 语句的,在嵌套查询中id...select_type 表示查询的类型 类型 说明 simple 简单子查询,不包含子查询和union primary 包含union或者子查询,最外层的部分标记为primary subquery 一般子查询中的子查询被标记为...subquery,也就是位于select列表中的查询 derived 派生表——该临时表是从子查询派生出来的,位于form中的子查询 union 位于union中第二个及其以后的子查询被标记为union
在弹出的输入框中输入:/usr/local回车,如下: ? 将mongodb复制与此文件夹中。...Tip:MongoDB常用命令: 数据库数据文件路径 mogond--dbpath $dbpath....await col.find({ tags: {$all:['热带','甜'] } } // $elemMatch: 指定字段数组中至少有一个元素满足所有查询规则 col.insertOne({hisPrice...而mongoose就是i 一个良好的工具。 mongoose是一个优雅的nodejs对象文档模型。它是由关系型数据库的思想去应用到非关系型数据库。..., name: String }); // 3.编译一个Model, 它对应数据库中复数、小写的Collection const Model = mongoose.model
如果查询有任何复杂的子查询,则最外层标记为PRIMARY(DERIVED、UNION、UNION RESUlT) table 访问引用哪个表(引用某个查询,如“derived3”) type 数据访问/...key_len 显示mysql在索引里使用的字节数 ref 显示了之前的表在key列记录的索引中查找值所用的列或常量 rows 为了找到所需的行而需要读取的行数,估算值,不精确。...通过把所有rows列值相乘,可粗略估算整个查询会检查的行数 Extra 额外信息,如using index、filesort等 id id是用来顺序标识整个查询中SELECT语句的,在嵌套查询中id越大语句优先执行...一般子查询中的子查询被标记为subquery,也就是位于select列表中的查询 derived:派生表——该临时表是从子查询派生出来的,位于form中的子查询 union:位于union中第二个及其以后的子查询被标记为...关联优化器会为查询选择关联顺序,左侧深度优先 当from中有子查询的时候,表名是derivedN的形式,N指向子查询,也就是explain结果中的下一列 当有union result的时候,表名是union
它们可以访问我们的服务器基础设施,如文件系统和数据存储,而「无需通过网络进行任何往返」。 对于React开发者来说,这是一个完整的范式转变,因为现在我们必须「从服务器组件的角度来思考」。...我们可以在应用程序中同时使用SSR和RSC,而不会出现任何问题。 ---- 8. RSC的优点 零捆绑包大小的组件 使用库对开发人员很有帮助,但它会增加捆绑包的大小,可能会影响应用程序性能。...我们可以自由地在服务器组件中使用第三方包,而不会对捆绑包大小产生任何影响。...相反,我们只是在 Note 组件内直接执行了 DB 查询(通常我们在服务器端代码中执行 DB 查询)。这是可能的,因为这是一个服务器组件,它在服务器上进行渲染。...这是一个通用的代码,我们可以在任何基于JavaScript的项目中使用它,以使用Mongoose和MongoDB URI连接到MongoDB import mongoose from "mongoose
这个时候就要想该怎么做才能合理的管理这些层级关系,在删除父评论的同时又能把所有子评论一起删除。查询的时候如何去由根到叶顺序输出层级关系。...post列中关联引用表(post表)的 _id(文章),在 hasChild 中记录是否存在回复。...在后期处理回复路由的时候不要忘记修改他的值。最关键的是 key 列,这个用来记录平行层级。...如 post 中的一篇 pid 为 11 的文章下有一条评论,那么 key 中命名 11#001,这是第一条评论,如果该评论下存在一条回复,则回复的 key 为 11#001#001,下层亦是如此。...然后删除 key 为 11#001 的评论只要使用正则匹配 /^11#001/即可,把匹配到的内容全部删除就可以不用管关联的 post 是否一致,以及 cid,而 key 的值可以从前端发起的请求中提取
领取专属 10元无门槛券
手把手带您无忧上云