首页
学习
活动
专区
圈层
工具
发布

Mongoose 实现关联查询和踩坑记录

如果需要指定哪些字段返回,哪些需要过滤,可定义 $project 对象,关联查询的字段过滤可使用 别名.关联文档中的字段 进行指定。..._id 字段,并且在 populate 方法里无法更改的,但是在 Mongoose 4.5.0 之后增加了虚拟值填充[3],以便实现文档中更复杂的一些关系。...如果你需要填充的虚拟值的显示是在 JSON 序列化中输出,就需要设置 toJSON 属性,例如 console.log(JSON.stringify(res))。...的虚拟值填充,还可以对匹配的文档数量进行计数,使用如下: // model/author.js AuthorSchema.virtual('bookListCount', { ref: 'Books...另外一种是 Mongoose 提供的 populate 方法,这种方式写起来,代码会更简洁些,这里需要注意如果关联的字段是非 _id 字段,一定要在 Schema 中设置虚拟值填充,否则 populate

28.1K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    深入浅出mongodb(一)

    MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组,操作起来比较简单和容易。...2.5 ObjectId 一个 ObjectId 其实可以分割为四部分,即当前时间戳,当前主机的hash,当前进程id,自动增加的计数器,有了这几个基本上就可以保证它的唯一性了。...(pid,'16')); //10204 十进制数 表示 当前进程id image.png 自动增加计数器 let seq = '5619b6'; //自动增加的计数器 2.6 Model...Model 模型是操作数据库最直接的部分,它代表整个集合 ,操作对象是整个集合。...第二种写法是返回promise 上述定义 model 的方法是通过 model 类创建的,还有一种创建 model 的方法是通过实例创建,这个创建出来的是一个操作对象,代表是一个单个文档只能操作自己。

    5K10

    node+mongodb建站攻略

    mongodb快速建模的工具mongoose。...5:测试前端流程 :来跑通前后端的流程,也就是说,从浏览器发起一个请求到后端,后端接收到之后,返回一段数据。...6:样式开发,伪造模板数据  :跑通前后端之后,就可以对页面进行一个样式的开发和一些HTML的dom结构的填充,同时要伪造一些模板数据。...7:设计数据库模型:这时候页面都有了,我们开始基于页面里面的内容同时来设计数据库的模型。 8:开发后端逻辑:然后来开发后端的逻辑,到这一步为止,前后端的逻辑都已经实现掉了。...9:配置依赖文件,网站开发结束:对前端静态资源版本和后端模块版本进行一个配置文件的生成,然后整个网站就开发结束了。

    1K50

    JavaScript--DOM总结

    DOM 文档对象模型 Document对象 Document对象集合 集合 描述 all 页面中所有标签,不去重,返回一个数组 forms 返回对文档中所有 Form 对象的引用,返回一个数组 images...返回对文档中所有 Image 对象的引用,返回一个数组 links 返回对文档中所有 Area 和 Link 对象的引用 Document对象属性 属性 描述 domain 返回当前服务器域名 lastModified...返回文档被最后修改的日期和时间该值来自于 Last-Modified HTTP 头部, 它是由 Web 服务器发送的可选项 title 当前文档的标题 URL URL 属性可返回当前文档的 URL referrer...rel 设置或返回当前文档与目标 URL 之间的关系。 rev 设置或返回目标 URL 与之间当前文档的关系。...其中整数指示每当元素出现时计数器的增量。默认是1。 counterReset 设置其后是正数的计数器名称的列表。其中整数指示每当元素出现时计数器被设置的值。默认是0。

    1.5K10

    【图文详解系列】JVM 内存模型

    (1)线程私有区: 进程计数器,记录正在执行的虚拟机字节码的地址; 虚拟机栈:方法执行的内存区,每个方法执行时会在虚拟机栈中创建栈帧; 本地方法栈:虚拟机的Native方法执行的内存区; (2)线程共享区...进程计数器PC 进程计数器PC,当前线程所执行的字节码行号指示器。每个线程都有自己计数器,是私有内存空间,该区域是整个内存中较小的一块。...当线程正在执行一个Java方法时,PC计数器记录的是正在执行的虚拟机字节码的地址;当线程正在执行的一个Native方法时,PC计数器则为空(Undefined)。...方法返回地址 正常退出,执行引擎遇到方法返回的字节码,将返回值传递给调用者 异常退出,遇到Exception,并且方法未捕捉异常,那么不会有任何返回值。...对象头本身是8的倍数,当对象的实例数据不是8的倍数,便需要填充数据来保证8字节的对齐。该功能类似于高速缓存行的对齐。

    14.4K42

    Mongoose学习参考文档

    第二个参数是更新的数量,如果要返回更新后的对象,则要使用如下方法 Person.findByIdAndUpdate(_id,{$set:{name:'MDragon'}},function(err...remove方法 4.Sub Docs   如同SQL数据库中2张表有主外关系,Mongoose将2个Document的嵌套叫做Sub-Docs(子文档)   简单的说就是一个Document嵌套另外一个...  如果children是parent的子文档,可以通过如下方法查询到children var child = parent.children.id(id); 4.2 新增、删除、更新   子文档是父文档的一个属性...,因此按照属性的操作即可,不同的是在新增父类的时候,子文档是会被先加入进去的。   ...,如果不带callback,则返回query,query没有执行的预编译查询语句,该query对象执行的方法都将返回自己,只有在执行exec方法时才执行查询,而且必须有回调。

    25.6K90

    Node.js中的MongoDB

    集合(collection):集合类似于数组,在集合中可以存放文档。 文档(document):文档数据库中的最小单位,我们存储和操作的内容都是文档。..." }); //5.统计数据库colleges集合中的文档数量 db.colleges.find().count(); //6.查询数据库colleges集合中name为Html5的文档 db.colleges.find...mongoose的相关概念 mongoose中提供了几个新的对象: + Schema(模式对象):Schema对象定义约束了数据库中的文档结构 + Model:Model对象作为集合中的所有文档的表示...,相当于MongoDB数据库中的集合collection + Document: Document表示集合中的具体文档 mongoose使用步骤 1.下载安装Mongoose: npm i mongoose...err) { console.log(count); } }); 遇到问题可以查看api MongoDB教程 mongoose的API文档

    6.4K40

    大数据技术之_22_MongoDB学习_MongoDB 的简介、下载、安装、启动、配置和关闭 + MongoDB 的基本操作 + Mongoose + 使用 java 对 MongoDB 增删改查

    "sunwukong"}); db.users.find({username: "sunwukong", age: 25}); db.users.find({age:25});      // 返回的是一个文档对象的数组...db.users.find(); // 6.统计数据库user集合中的文档数量 db.users.find().count(); // 7.查询数据库 user 集合中 username 为 sunwukong...err) {         console.log(arguments); // arguments 该参数是返回的插入的文档,一般用的比较少。     ...查询的方法:     Model.find(conditions, [projection], [options], [callback])         - 查询所有符合条件的文档,总会返回一个数组...([conditions], [projection], [options], [callback])         - 查询符合条件的第一个文档,总会返回一个具体的文档对象     参数解释:

    19.8K30

    Nuxt + Koa2 + Mongodb 手撸一个网上商城

    文档地址:https://finget.github.io/2019/08/06/nuxt-koa-mongodb/ 项目目录 先来看看整个项目的目录结构,不容易迷路。...fetch 该方法用于渲染页面(页面组件加载前被调用【服务端或切换至目标路由之前】)前填充应用的状态树(store)数据,与asyncData方法类似,不同的是它不会设置组件的数据。...Schema 可以定义每个文档中存储的字段,及字段的验证要求和默认值。 mongoose.model() 方法将模式“编译”为模型。模型就可以用来查找、创建、更新和删除特定类型的对象。...limit就表示限制返回的条数。...mongoose 获取内嵌数组的长度,有没有更好的办法,或者说是既能返回总数也能进行分页? 订单是在数据中库存了的,没有展示,收货地址也只有增加。这两处都可以扩展增删改查的功能。

    9.4K10

    记一个异步循环遍历的问题

    以下所有操作都是使用的 mongoose ,另外 schema 和 model 定义这些无关紧要的部分统统省略了,无需深究代码的细节处。...从 doc 数组中遍历每一个元素的 phone 属性,去另外一张表中查询 phone 匹配的数据,合并对象,然后返回结果。...过程 ---- 第一阶段:天真的想当然 知道点异步流程的同学都明白,最终的result肯定是为空的。 第二阶段:加个计数器吧 加个计数器,然后一直循环判断计数是否完成。...我们都知道 node 是基于异步的事件循环机制,但是当我们这里使用 while 循环判断时,这个 while 本质上是一个同步的代码,其是无法与事件循环机制的钩子对接,所以无法跳出这个同步的 while...结语 ---- 第二阶段的同步阻塞是很容易忽略和想当然的地方,第三阶段当我们要在 promise 中使用类似于 for 、map 这种循环时,其实应用使用的是 promise.all,另外如果你写出了

    1.3K20

    架构和数据库

    - 学生 添加字段值为数组 11 插件操作数据库 大部分使用程序来完成数据库操作 Mongoose 让我们可以通过 Node 操作 MongoDB 模板 Mongoose 是对象文档模型(ODM)库,对原生的模块进行了封装...,提供了更多的功能 Mongoose 优势 官方地址:http://www.mongoosejs.net/ 可以为文档创建一个模式结构(Schema) 可以对模型中的对象/文档进行验证 数据可以通过类型转换转换为对象...Model 对象作为集合中的所有文档表示 相当于 MongoDB数据库中的集合collection Document 表示集合中的具体文档 Schema 对象 const Schema = mongoose.Schema...0} "name age -_id" options 查询选项(skip limit) callback 回调函数。...查询结果结果会通过回调函数返回,参数必选,不传没有返回值 通过 find() 查询的结果,返回的对象就是 Document,文档对象 Document 对象是 Model 的实例 doc instanceof

    2K10

    Oracle数据库,浅谈Oracle序列

    Oracle是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一,而序列是一个计数器,它并不会与特定的表关联,通过创建Oracle序列和触发器实现表的主键自增。...序列一般是用来填充主键和计数的,不占用磁盘空间,占用内存。本期我们重点来讲述一下Oracle序列。 1、创建序列 ORACLE序列的语法格式为: ? ?...选项NOMAXVALUE是默认选项,代表没有最大值定义,这时对于递增Oracle序列,系统能够产生的最大值是10的27次方;对于递减序列,最大值是-1。...3、序列使用 CURRVAL: 返回序列的当前值。 NEXTVAL:序列递增,返回下一值。...你不能使用序列的CURRVAL和NEXTVAL,在下面情况下(具体参见官方文档): (1)、在DELETE、SELECT、UPDATE的子查询中 (2)、在视图或物化事物的查询中。

    2.2K30

    04_数据库

    1 Web架构 web总共分为三个部分: 客户端 服务器 数据库 web网站访问过程: 客户端向服务器发送请求 服务器操作数据库 数据库将结果返回给服务器 服务器将结果响应给客户端 2 数据库概念 数据库...(ODM)库,对原生的模块进行了封装,提供了更多的功能 Mongoose 优势 官方地址:http://www.mongoosejs.net/ 可以为文档创建一个模式结构(Schema) 可以对模型中的对象.../文档进行验证 数据可以通过类型转换转换为对象 可以使用中间件来应用业务逻辑挂钩 比 Node 原生的 MongoDB 驱动更容易 使用 Mongoose 使用 npm install mongoose..., _id: 0} "name age -_id" options 查询选项(skip limit) callback 回调函数。...查询结果结果会通过回调函数返回,参数必选,不传没有返回值 通过 find() 查询的结果,返回的对象就是 Document,文档对象 Document 对象是 Model 的实例 doc instanceof

    1.8K10

    架构设计的创新之路:技术迭代中实现成本与效率的双重优化

    当需求发生变化时,开发者可以在相应的层次进行修改,而不需要对整个系统进行大规模的重构。2、使用微服务架构微服务架构是一种将复杂系统分解为一组小型服务的架构模式。...而且自动化部署工具可以实现自动化的扩缩容和故障恢复,进一步提高系统的稳定性和可用性。4、优化数据库设计数据库是系统的核心组件之一,其性能直接影响整个系统的性能。...在架构设计中,需要优化数据库设计,选择合适的数据库类型(如关系型数据库或 NoSQL 数据库),并合理设计数据表结构和索引。...= require('mongoose'); const app = express(); app.use(bodyParser.json()); // 连接 MongoDB 数据库 mongoose.connect...= require('mongoose'); const app = express(); app.use(bodyParser.json()); // 连接 MongoDB 数据库 mongoose.connect

    48721

    Nuxt + Koa2 + Mongodb 手撸一个网上商城

    文档地址:https://finget.github.io/2019/08/06/nuxt-koa-mongodb/ 项目目录 先来看看整个项目的目录结构,不容易迷路。...fetch 该方法用于渲染页面(页面组件加载前被调用【服务端或切换至目标路由之前】)前填充应用的状态树(store)数据,与asyncData方法类似,不同的是它不会设置组件的数据。...Schema 可以定义每个文档中存储的字段,及字段的验证要求和默认值。 mongoose.model() 方法将模式“编译”为模型。模型就可以用来查找、创建、更新和删除特定类型的对象。...limit就表示限制返回的条数。...mongoose 获取内嵌数组的长度,有没有更好的办法,或者说是既能返回总数也能进行分页? mongodb我也是现学现卖,查询语句写的可能不是最优的,仅作参考。

    10.7K10

    深入理解Java虚拟机(程序编译与代码优化)

    解析与填充符号表 解析步骤包含了经典程序编译原理中的词法分析和语法分析两个过程;完成词法分析和语法分析之后,下一步就是填充符号表的过程。符号表是由一组符号地址和符号信息构成的表格。...,到此为止整个编译过程就结束了。...例如 HashMap 的 get() 方法返回的就是一个 Object 对象,那么只有程序员和运行期的虚拟机才知道这个 Object 到底是个什么类型的对象。...对于第一种情况,由于是方法调用触发的编译,因此编译器理所当然地会以整个方法作为编译对象,这种编译也是虚拟机中标准的 JIT 编译方式。...在确定虚拟机运行参数的情况下,这两个计数器都有一个确定的阈值,当计数器超过阈值就会触发 JIT 编译。 方法调用计数器 顾名思义,这个计数器用于统计方法被调用的次数。

    76310
    领券