同时它也是一个对象数据库,没有表、行等概念,也没有固定的模式和结构,所有的数据以文档的形式存储(文档,就是一个关联数组式的对象,它的内部由属性组成,一个属性对应的值可能是一个数、字符串、日期、数组,甚至是一个嵌套的文档...Mongoose,因为封装了对MongoDB对文档操作的常用处理方法,让NodeJS操作Mongodb数据库变得easy、easy、So easy!...一个属性对应的值可能是一个数、字符串、日期、数组,甚至是一个嵌套的文档。)...集合 —— 由一组文档组成,如果将MongoDB中的一个文档比喻成关系型数据库中的一行,那么一个集合就相当于一张表。... TestModel = db.model("test1", TestSchema); test1:数据库中的集合名称,当我们对其添加数据时如果test1已经存在,则会保存到其目录下,如果未存在,则会创建
创建集合 创建集合分为两步,-是对对集合设定规则,二是创建集合,创建mongoose.Schema构造函数的实例即可创建集合。...实际在数据库中产生的集合名为courses 2.创建文档 创建文档实际上就是向集合中插入数据。 方法1 分为两步: ①创建集合实例。 ②调用实例对象下的save方法将数据保存到数据库中。...' }).then(result => { console.log(result); }); // 删除多个 如果条件为空,默认删除所有文档 返回一个对象,n代表删除的文档数,OK表示是否删除成功...验证 在创建集合规则时,可以设置当前字段的验证规则,验证失败则插入失败。...通常不同集合的数据之间是有关系的,例如文章信息和用户信息存储在不同集合中,但文章是某个用户发表的 要查询文章的所有信息包括发表用户,就需要用到集合关联。
实际在数据库中产生的集合名为courses 1.创建文档 创建文档实际上就是向集合中插入数据。 方法1 分为两步: ①创建集合实例。 ②调用实例对象下的save方法将数据保存到数据库中。...' }).then(result => { console.log(result); }); // 删除多个 如果条件为空,默认删除所有文档 返回一个对象,n代表删除的文档数,OK表示是否删除成功...验证 在创建集合规则时,可以设置当前字段的验证规则,验证失败则插入失败。...通常不同集合的数据之间是有关系的,例如文章信息和用户信息存储在不同集合中,但文章是某个用户发表的 要查询文章的所有信息包括发表用户,就需要用到集合关联。...案例:用户信息增删改查 搭建网站服务器,实现客户端与服务器端的通信 连接数据库,创建用户集合,向集合中插入文档 当用户访问/list时, 将所有用户信息查询出来 将用户信息和表格HTML
1.数据库相关概念 在一个数据库软件中可以包含多个数据仓库,在每个数据仓库中可以包含多个数据集合,每个 数据集合中可以包含多条文档(具体的数据)。...术语 解释说明 database 数据库,mongoDB数据库软件中可以建立多个数据库 collection 集合,一组数据的集合,可以理解为JavaScript中的数组 document 文档,一条具体的数据...,可以理解为JavaScript中的对象 field 字段,文档中的属性名称,可以理解为JavaScript中的对象属性 2....Mongoose第3三方包 使用Nodejs操作MongoDB数据库需要依赖Node.js第 三方包mongoose 使用npm install mongoose命令下载 3.启动MongoDB...MongoDB返回的是promise对象 mongoose.connect('mongodb://localhost/playground') .then(() => console.log(
文章目录 一、以异步返回返回多个返回值 二、同步调用返回多个值的弊端 三、尝试在 sequence 中调用挂起函数返回多个返回值 四、协程中调用挂起函数返回集合 一、以异步返回返回多个返回值 ----...---- 同步调用返回集合和序列代码示例 : 同步调用函数时 , 如果函数耗时太长或者中途有休眠 , 则会阻塞主线程导致 ANR 异常 ; package kim.hsl.coroutine import...// 调用 " 返回 List 集合的函数 " , 并遍历返回值 listFunction().forEach { // 遍历打印集合中的内容...sequence 中调用挂起函数返回多个返回值 ---- 尝试使用 挂起函数 kotlinx.coroutines.delay 进行休眠 , 这样在挂起时 , 不影响主线程的其它操作 , 此时会报如下错误...---- 如果要 以异步方式 返回多个返回值 , 可以在协程中调用挂起函数返回集合 , 但是该方案只能一次性返回多个返回值 , 不能持续不断的 先后 返回 多个 返回值 ; 代码示例 : package
1.数据库概述及环境搭建 1.1为什么要使用数据库 动态网站中的数据都是存储在数据库中的 数据库可以用来持久存储客户端通过表单收集的用户信息 数据库软件本身可以对数据进行高效的管理 1.2...1.5数据库相关概念 在一个数据库软件中可以包含多个数据仓库,在每个数据仓库中可以包含多个数据集合,每个 数据集合中可以包含多条文档(具体的数据)。...术语 解释说明 database 数据库,mongoDB数据库软件中可以建立多个数据库 collection 集合,一组数据的集合,可以理解为JavaScript中的数组 document 文档,一条具体的数据...,可以理解为JavaScript中的对象 field 字段,文档中的属性名称,可以理解为JavaScript中的对象属性 1.6 Mongoose第3三方包 使用Nodejs操作MongoDB数据库需要依赖...MongoDB返回的是promise对象 mongoose.connect('mongodb://localhost/playground') .then(() => console.log(
1.4 Schema.Types NodeJS中的基本数据类型都属于Schema.Type,另外Mongoose还定义了自己的类型 //举例: var ExampleSchema =...remove方法 4.Sub Docs 如同SQL数据库中2张表有主外关系,Mongoose将2个Document的嵌套叫做Sub-Docs(子文档) 简单的说就是一个Document嵌套另外一个...如果子文档在更新时出现错误,将直接报在父类文档中,可以这样处理: ChildrenSchema.pre('save',function(next){ if('x' === this.name...,如果不带callback,则返回query,query没有执行的预编译查询语句,该query对象执行的方法都将返回自己,只有在执行exec方法时才执行查询,而且必须有回调。 ...} }); 7.2 验证失败 如果验证失败,则会返回err信息,err是一个对象该对象属性如下 err.errors //错误集合(对象)
我年轻时注意到,我每做十件事有九件不成功,于是我就十倍地去努力干下去。...2.4 Schema 定义 Schema 来说其实是用来定义文档的基本字段和集合,也可以理解为表结构的定义。Schema 是与数据无关的 并不能直接操作数据库。...:'user'}) 在 mongoose 中,提供了 Schema 的类,我们可以在实例化的时候先定义mongoose.Schema,以免后续总是要出现丑陋的new mongoose.Schema()。...Model 模型是操作数据库最直接的部分,它代表整个集合 ,操作对象是整个集合。...第二种写法是返回promise 上述定义 model 的方法是通过 model 类创建的,还有一种创建 model 的方法是通过实例创建,这个创建出来的是一个操作对象,代表是一个单个文档只能操作自己。
非关系型数据库的解决思路: 在文章的Collection中增加一个SubCollection,SubCollection中可以存放用户信息,如用户名,只要有用户喜欢了文章,在这篇文章的文档中的子文档下插入一条记录即可...项目中的Mongodb设计 NodeJS的流行,离不开丰富的中间件支持,对于操作Mongoose的中间件,我推荐“mongoosejs”, 官网称之为:“Mongoose ODM”。...通过查找资料我的总结如下: 如果只需要通过A集合查询B集合,而不需要反过来查询,也就是单向的关系(如文章和评论,只需要展示文章的时候,将其评论展示即可),那么可以在A集合中建立一个子集合B。...而Mongoose的解决方法是在数据库的定义时就可以将这些信息定义好。这可能也就是约定优于配置(convention over configuration)的好处吧!...关于NodeJS中数据库的知识,就写这么多了,想要更多的了解有关Mongoose的用法,请参考官方文档:Mongoosejs Guide。文档写得非常详细! Have a good luck~
,服务会自动尝试重连直到连接成功 无需手动处理连接数 我们逐条来看每个需求对应的配置: 见注释 A,在开发环境中设置 'debug' 为 true,数据库将会把集合方法和参数打印到控制台。...见两处注释 B,这里贴一段 mongoose 文档中对 bufferMaxEntries 的解释: bufferMaxEntries - The MongoDB driver also has its...见注释 C,这实际上是 mongoose 的默认设置,其连接数据库时的 config 参数 autoReconnect 默认为 true,其含义见文档: autoReconnect - The underlying...对于 MongoDB 连接池的问题,建议是不要去手动处理。mongoose 自己会维护一个默认最大数量为 5 的连接池,只有当你发现有一些慢查询可能阻塞快查询时才应该考虑增大 poolSize。...解决方法也不是没有,就是比较鸡肋:在 mongoose 连接的 'error' 事件监听回调函数中尝试重连。但是需要设置最大重试次数,否则会发生内存泄露。
每个 schema 映射到 MongoDB 的集合(collection)和定义该集合(collection)中的文档的形式。...该 versionKey 是每个文档首次创建时,由 mongoose 创建的一个属性。包含了文档的内部修订版。此文档属性是可配置的。默认值为__v。...因为这是一个重大的改变,添加了 useNewUrlParser 标记如果在用户遇到 bug 时,允许用户在新的解析器中返回旧的解析器。...remove() Model.remove(filter, options, callback) 从集合中删除所有匹配 filter 条件的文档。...看完Models,最后让我们来看下在实战中比较有用的Populate 联表(Populate) Mongoose 的 populate() 可以连表查询,即在另外的集合中引用其文档。
mongodb 文档型数据库,nodejs的好基友。...在弹出的输入框中输入:/usr/local回车,如下: ? 将mongodb复制与此文件夹中。...也需要一个odm工具来方便更好的操作。而mongoose就是i 一个良好的工具。 mongoose是一个优雅的nodejs对象文档模型。它是由关系型数据库的思想去应用到非关系型数据库。..., name: String }); // 3.编译一个Model, 它对应数据库中复数、小写的Collection const Model = mongoose.model...Keystone在官网上声称:在Node.js中,用Keystone搭建数据驱动的网站、应用程序和API是最容易的。
线上服务:PM2 + nginx 第二章 选择nodejs框架 2-1 nodejs框架选型-开始 所用常见的nodejs框架中,Koa2是最简单、最小的 目的扩充广度,让你了解有这门技术 Koa2...('useCreateIndex', true) mongoose.set('useFindAndModify', false) // 开始连接( 使用用户名和密码时,需要 `?...但是尝试了另一个启动命令 redis-server: 成功了! 如图显示这个版本是5.0.8的,也就是说我之前电脑上其实是有redis的,我新安装的这个6.0.9的并没有用上。...Cookie和Session JWt SSO和OAuth2 4-2 介绍 Session 登录 Cookie做登录校验的过程 前端传入用户名密码,传给后端 后端验证成功,返回信息时set-cookie...后端验证成功,返回一段token字符串----将用户信息加密得到。 前端获取token之后,存储起来。 以后访问接口,都在header中带上token。
Mongoose 介绍 Mongoose 是在 Node.js 异步环境下对 mongodb 进行便捷操作的对象模型工具,Mongoose 是 NodeJS 的驱动,为NodeJS独有。...定义 Schema 数据库中的 Schema,为数据库对象的集合,Schema 是 Mongoose 里使用的一种数据模式, 可以理解为表结构的定义,每个 Schema 会映射到 Mongodb 中的一个...var User=mongoose.model('User', UserSchema); 如上面的定义的模型名称叫User,会操作所在数据库中的 users 这个集合。 (2)....传三个参数时格式如下: var User=mongoose.model('User', UserSchema, Collection) 传入三个参数时,前两个参数意思一样,第三个参数为所要操作的集合名称...var User=mongoose.model('User', UserSchema, student); 如上面的定义的模型名称叫User,会操作所在数据库中的 student 这个集合。 3.
Nodejs的web服务器,也是CGI的程序无状态的,与PHP不同的地方在于,单线程应用,所有请求都是异步响应,通过callback方式返回数据。...您会看到此消息的可能原因是,您尝试在没有解决方案文件的情况下生成项目,并且为 oose\node_modules\mongoose\node_modules\mongodb\node_modules\bson...是通过app.js中app.use的res.locals变量,通过框架进行的赋值。...我们希望如果用户登陆时,用户名或者密码出错了,会给用户提示,应该如何去实现。...我们避免这样的错误发生。 还记录路由部分里说的get,post,all的作用吗?我现在要回到路由配置中,再做点事情。
MongoDB 提供了高性能、高可用、支持分片及面向文档等特性,是 Nodejs 应用程序最受欢迎的非关系型数据之一。...fs.chunks 集合的多个文档中。...然后将文件信息存储在 fs.files 集合的唯一一份文档中。其中 fs.chunks 集合中多个文档中的 file_id 字段对应 fs.files 集中文档”_id”字段。...读文件时,先根据查询条件在 files 集合中找到对应的文档,同时得到“_id”字段,再根据“_id”在chunks 集合中查询所有“files_id”等于“_id”的文档。...以下是一个 nodejs 版本的代码: const mongoose = require('mongoose') const fs = require('fs') const Promise = require
的模块用的是mongoose。...当 Member 集合中的 document 不多时,比如只有 1000 个时,那确实没有问题。但是当 Member 集合中有 1000 万个 document 时,会发生什么呢?...打印find()返回的 members 数组可知,集合中所有元素都返回了,哪个数组放得下 1000 万个 Object?...正确方法:find().cursor()与 eachAsync() 将整个集合 find()全部返回,这种操作应该避免,正确的方法应该是这样的: function findAllMembersCursor...我的测试环境是这样的: ubuntu 14.04 mongodb 3.2 nodejs 10.9.0 1.
本文源自工作中的一个问题,在使用 Mongoose 做关联查询时发现使用 populate() 方法不能直接关联非 _id 之外的其它字段,在网上搜索时这块的解决方案也并不是很多,在经过一番查阅、测试之后...$lookup.foreignFiled: 被 Join 的集合的字段,本示例中是 Books 表的 bookId 字段。 $as: 别名,关联查询返回的这个结果起一个新的名称。...如果需要指定哪些字段返回,哪些需要过滤,可定义 $project 对象,关联查询的字段过滤可使用 别名.关联文档中的字段 进行指定。...MongoDB 官方文档 #lookup-aggregation[2] Mongoose Virtual 和 populate 实现 Mongoose 的 populate 方法默认情况下是指向的要关联的集合的...表示的要 Join 的集合的名称,同 $lookup.from justOne: 默认为 false 返回多条数据,如果设置为 true 就只会返回一条数据 AuthorSchema.virtual('
异步生成器函数与异步函数和生成器函数的不同之处在于,它们不返回 promise 或迭代器,而是返回一个异步迭代器。...假设你要循环浏览 Mongoose cursor 【https://thecodebarbarian.com/cursors-in-mongoose-45】中的所有文档,并通过 websocket 或命令行报告进度...首先,在上面的示例中,在 subscribe() 中记录到控制台的代码是响应式的,而不是命令式的。换句话说,subscribe() handler 无法影响异步函数主体中的代码,它仅对事件做出反应。...例如,使用 for/await/of 循环时,你可以在恢复异步生成器函数之前添加 1 秒的暂停时间。...使用 yield 报告异步函数的进度是一个很诱人的想法,因为它使你可以将业务逻辑与进度报告框架分离。下次需要实现进度条时,请试试异步生成器。
, hobbies: [String] }); // 使用规则创建集合 const User = mongoose.model('User', userSchema); // 查询用户集合中的所有文档...'}).then(result => console.log(result)) // findOne方法返回一条文档 默认返回当前集合中的第一条文档 // User.findOne({name: '李四...40}}).then(result => console.log(result)) // 查询用户集合中hobbies字段值包含足球的文档 // User.find({hobbies: {$in: [...// 返回删除的文档 // 如何查询条件匹配了多个文档 那么将会删除第一个匹配的文档 // User.findOneAndDelete({_id: '5c09f267aeb04b22f8460968'}...// 返回是否删除成功的对象 // 如果匹配了多条文档, 只会删除匹配成功的第一条文档 // User.updateOne({name: '李四'}, {age: 120, name: '李狗蛋'}).
领取专属 10元无门槛券
手把手带您无忧上云