首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

本文源自工作的一个问题,使用 Mongoose 做关联查询时发现使用 populate() 方法不能直接关联非 _id 之外的其它字段,在网上搜索时这块的解决方案也并不是很多,经过一番查阅、测试之后...Virtual 和 populate 实现 Mongoosepopulate 方法默认情况下是指向的要关联的集合的 _id 字段,并且 populate 方法里无法更改的,但是 Mongoose...可以创建 Schema 时第二个参数 options 设置,也可以使用创建的 Schema 对象的 set 方法设置。...另外一种是 Mongoose 提供的 populate 方法,这种方式写起来,代码会更简洁些,这里需要注意如果关联的字段是非 _id 字段,一定要在 Schema 设置虚拟值填充,否则 populate...关联时会失败。

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

你真的了解mongoose吗?

引言 继上篇文章「Koa2+MongoDB+JWT实战--Restful API最佳实践」后,收到许多小伙伴的反馈,表示自己对于mongoose不怎么了解,上手感觉有些难度,看官方文档又基本都是英文(宝宝心里苦...index: 布尔值,是否属性定义一个索引。 unique: 布尔值,是否属性定义一个唯一索引。 sparse: 布尔值,是否属性定义一个稀疏索引。...看完Models,最后让我们来看下在实战中比较有用的Populate 联表(PopulateMongoosepopulate() 可以连表查询,即在另外的集合引用其文档。...ref 选项告诉 Mongoose 使用 populate() 填充的时候使用哪个 Model。...ref 选项告诉 Mongoose 填充的时候使用 User model。所有储存在 answerer 的 _id 都必须是 User model document 的 _id。

41.4K30

使用Mongoosepopulate方法实现多表关联查询

MongoDB3.2以上的版本有类似于 join 的 $lookup 聚合操作符,其实 Mongoose 有一个更强大的替代方法,叫做populate ( ),它允许你在其他集合引用文档,实现更简洁优雅的查询操作...定义文章的 schema 生成模型导出,文件名 article.js 通过给 schema 的关联字段添加 ref 与指定的模型建立关联 // 引入自定义的数据库连接文件 var mongoose =...执行查询操作 // 注意使用 populate 需要引入用到的 model var ArticleCateModel=require('....(docs); }) // 文章表、分类表、用户表关联 ArticleModel.find({}).populate('cid').populate('author_id').exec(function...(err,docs){ console.log(docs); }) 通过给 populate 传入所关联的字段与指定的集合进行关联查询, exec( ) 的回调方法获取查询的结果。

3.5K20

MongoDB增删改查操作

console.log(result)).catch(err => console.log(err)); 3. mongoDB数据库导入数据 找到mongodb数据库的安装目录,将安装目录下的bin目录放置环境变量...           message: '您输入的值不符合验证规则'       }   } }); // 使用规则创建集合 const Post = mongoose.model('Post...(err[k]['message']);       }   }) 8.集合关联 通常不同集合的数据之间是有关系的,例如文章信息和用户信息存储不同集合,但文章是某个用户发表的 要查询文章的所有信息包括发表用户...使用id对集合进行关联 使用populate方法进行关联集合查询 ?...type: String   },    // 1、使用ID将文章集合和作者集合进行关联    author: {        type: mongoose.Schema.Types.ObjectId

6.5K20

MongoDB增删改查操作

console.log(result)).catch(err => console.log(err)); 3.mongoDB数据库导入数据 找到mongodb数据库的安装目录,将安装目录下的bin目录放置环境变量...message: '您输入的值不符合验证规则' } } }); // 使用规则创建集合 const Post = mongoose.model('Post...(err[k]['message']); } }) 8.集合关联 通常不同集合的数据之间是有关系的,例如文章信息和用户信息存储不同集合,但文章是某个用户发表的 要查询文章的所有信息包括发表用户...使用id对集合进行关联 使用populate方法进行关联集合查询 // 关联集合 ​ const mongoose = require('mongoose'); // 连接数据库 mongoose.connect...type: String }, // 1、使用ID将文章集合和作者集合进行关联 author: { type: mongoose.Schema.Types.ObjectId

6.2K10

深入浅出mongodb之实战

我们执行node文件的时候,如果修改了node文件,每次执行都需要重新启动项目才行,为了方便我们可以使用nodemon来监听项目的改动,不再需要重复启动项目,这么方便的东西用起来能不香吗??...useUnifiedTopology: true }); 设置跨域 开发,我们采用的都是前后端分离的状态,本地的开发环境我们无法避免的会遇到跨域[3]的情况,我们这里设置允许所有的源访问 app.use...实际上真正的开发环境,如果我们这么设置允许所有的的源都可以访问会有很多问题,我们可以使用cors[4]来代替它 当然如果在生产中我们采用nginx部署之后,就不存在跨域了?...中有这么一句话一切皆为中间件,我们设置路由的时候,需要在app.js中注册之后才能使用 //app.js var api = require("....最后 本文结束,有什么问题和有错误的地方,欢迎大家的留言和评论,还有后续更新,下期更加精彩 ???

1.7K10

Node使用火焰图优化CPU爆涨

背景 话不多说,先上图,这是得到App静态资源更新服务的CPU使用率监控,可以看到7月2号到7月3号后,cpu使用率发生了爆涨,八点的早高峰和下午六点的晚高峰,几乎可以把cpu打满。...从completeMany这里破案了,这是mongoose的一个方法,作用是将查询到的结果进行包装,使结果的每一个文档成为mongoose文档,使之可以继续使用mongoose提供的方法。...文档还提到了,lean精简模式,对于高性能只读的情况是非常有用的。...优化 回到问题上来,看到mongoose Document的问题,7月2号到7月3号后,为什么会突然导致CPU暴涨恍然大悟,自己之前review代码,看着代码没问题,但是忽略了这一个版本因为业务调整导致查询压力大大增加...如图可以看到,cpu使用优化后得到了大大提升,并且稳定在了百分之十五以内。问题解决了,一切皆大欢喜,服务器降配一切回到正常。

2.6K40

​eggjs实战

本文主要内容- 文档生成工具:基于插件的swagger-doc接口定义- 统一异常处理- 基于扩展的helper响应统一处理- validate接口格式检查- 三层结构 初步 安装 推荐直接使用脚手架,...ctx.body = { code: status, // 服务端自身的处理逻辑错误(包含框架错误500 及 自定义业务逻辑错误533开 始 ) 客户端请求参数导致的错误(...应用开发,我们可能经常要自定义一些 helper 方法,例如上面例子的 formatUser,我们可以通过框架扩展的形式来自定义 helper 方法。 在这里我们定义了两个方法。...-s 插件里补上这么一句: // plugin.jsmongoose : { enable: true, package: 'egg-mongoose',}, // config.default.js...}}) return mongoose.model('User', UserSchema)} service 先安装哈希依赖: npm install egg-bcrypt -s 插件定义:

3K20

Koa2+MongoDB+JWT实战--Restful API最佳实践

最佳实践 请求设计规范 URI 使用名词,尽量使用复数,如/users URI 使用嵌套表示关联关系,如/users/123/repos/234 使用正确的 HTTP 方法,如 GET/POST/PUT...拿到路由分配的任务并执行 koa 是一个中间件 为什么要用控制器 获取 HTTP 请求参数 Query String,如?...rest : { stack, ...rest } }) ); 错误会默认抛出堆栈信息stack,在生产环境,没必要返回给用户,开发环境显示即可。...简单的说,Mongoose就是对node环境MongoDB数据库操作的封装,一个对象模型(ODM)工具,将数据库的数据转换为JavaScript对象以供我们应用中使用。...安装 mongoose npm install mongoose -S 连接及配置 const mongoose = require("mongoose"); mongoose.connect(

9.2K42

从零到部署:用 Vue 和 Express 实现迷你全栈电商应用(二)

迷你全栈电商应用实战系列的第二篇教程,我们将通过基于 Node.js 平台的 Express[1] 框架实现后端 API 数据接口,并且将数据存储 MongoDB[2] 。...初探脚手架代码 通过 express-generator 初始化的项目代码,我们整个教程只需要了解下面四个文件: •app.js:Express 应用主文件•bin/www:用来开启服务器的脚本•...接着我们我们的 app.js 文件中导入 mongoose ,并且通过 mongoose 提供的接口连接我们的 MongoDB 数据库: // ... const mongoose = require...CORS 是用来限制此域名下的资源访问解决方案,当它关闭时,另外一个域名访问此域名的资源时会被拒绝。...我们开头导入了我们之前定义的 ManufacturerModel,这是 Mongoose 为我们提供的操作数据库的接口,我们通过定义 Model 上的一系列如 find、findOne、updateOne

3K10

我的NodeJS学习之路6(数据库设计及开发)

非关系型数据库的解决思路: 文章的Collection增加一个SubCollection,SubCollection可以存放用户信息,如用户名,只要有用户喜欢了文章,在这篇文章的文档的子文档下插入一条记录即可...通过查找资料我的总结如下: 如果只需要通过A集合查询B集合,而不需要反过来查询,也就是单向的关系(如文章和评论,只需要展示文章的时候,将其评论展示即可),那么可以A集合建立一个子集合B。...如果既需要通过A查询B,又需要通过B查询A(如作者和文章,需要查询某作者下的所有文章,展示文章的时候,有需要展示作者的相关信息),那么可以子集合通过一个唯一字段关联父集合。..._user.username是出不来数据的,原因就是我们需要用到populate()函数。...以前使用Hibernate,默认是没有这个功能的,要想实现需要通过@PrePersist注解和@PreUpdate注解来手动定义好,很是麻烦。

2.8K10

react+koa2+mongodb实现留言功能(可体验)

留言功能在社交占据很重要的作用。这里实现的留言功能,参考微信朋友圈的方式: 用户发送一个TOPIC话题,读者可以该话题下面进行评论,也可以对该话题下的留言进行评论。...是的,其Form表单就是给留言使用的,其结构仅仅是剔除了主题留言中的subject字段输入框,但是实际传参我还是会使用到。 完整的前端代码可前往jimmyarea 留言(前端)查看。...后端 使用的技术: mongodb 数据库,这里我使用到了其ODM mongoose koa2 一个Node框架 pm2 进程守卫 apidoc 用来生成接口文档(如果你留意体验站点,右上角有一个...首先,我们对自己要存储的数据结构schema进行相关的定义: const mongoose = require('mongoose') const Schema = mongoose.Schema /...本篇的重点是,对评论的话题和留言,如何转换成两层的树型结构呢? 这就是涉及到了pid这个字段,也就是父节点的id: 话题的pid为-1,话题下留言的pid为话题的记录值。

1K10

MongoDB增删改查操作

数据库的所有操作都是异步操作 1.使用create方法创建文档 通过回调函数的方法获取异步API // 向集合插入文档 Course.create({ name: 'JavaScript',...mongoose验证 创建集合规则时,可以设置当前字段的验证规则,验证失败就则输入插入失败。...1.7 集合关联 通常不同集合的数据之间是有关系的,例如文章信息和用户信息存储不同集合,但文章是某个用户发表的,要查询文章的所有信息包括发表用户,就需要用到集合关联。...使用id对集合进行关联 使用populate方法进行关联集合查询 ?...,并实现修改用户信息功能 修改用户信息分为两大步骤 1.增加页面路由 呈现页面 1.点击修改按钮的时候 将用户ID传递到当前页面 2.从数据库查询当前用户信息 将用户信息展示到页面

19.8K30

Koa入门(四)Koa 操作数据库

1.1 NoSql数据库优缺点 优势方面主要体现在下面几点: 简单的扩展 快速的读写 低廉的成本 灵活的数据模型 不足方面主要有下面几点: 不提供对SQL的支持 支持的特性不够丰富 现有的产品不够成熟...')) mongoose.connection.on('error', console.error)像链接地址、端口配置我们最好单独放在配置文件,更好的维护// app/config.js module.exports...koa 链接数据库成功 4.2 创建 user modal 新建 app/models/user.js (使用复数),建立模型const mongoose = require('mongoose')...如果需要的话可以查表时使用 select 关键字password: { type: String, required: true, select: false // 不会返回 } await...put方法注册路由router.put('/following/:my_id/:id', follow)使用 postman 请求后拉取列表 如果想获取关注者的详细信息使用 populate 关键字:

2.9K40
领券