mongoose中的populate之多级填充,嵌套字段填充?
在mongoose中存引用的时候如果是多级,查询的时候填充引用字段会使用populate,如下:
定义一个User,有字段friends每一项是自己collection的ObjectId。
// file: user-schema.js
let mongoose = require('mongoose')
let ObjectId = mongoose.Schema.Types.ObjectIdmodule.exports = new mongoose.Schema({name: String,friends: [{type: ObjectId, ref: 'User'}]
})
// file: user-model.js
let mongoose = require('mongoose')
let userSchema = require('./user-schema.js')module.exports = mongoose.model('User', userSchema)
定义一个commentSchema有字段from是User的_id,还有嵌套字段reply每一项是一个document有字段from和to都是User的_id
// file: comment-schema.js
let mongoose = require('mongoose')
let ObjectId = mongoose.Schema.Types.ObjectIdmodule.exports = new mongoose.Schema({from: {type: ObjectId, ref: 'User'},content: String,reply: [{to: {type: ObjectId, ref: 'User'},from: {type: ObjectId, ref: 'User'},content: String}]
})
下面开始查询。
// file: comment-model.js
let mongoose = require('mongoose')
let ObjectId = mongoose.Schema.Types.ObjectIdmodule.exports = mongoose.model('Comment', userSchema)
let Comment = require('./comment-model.js')Comment.findOne({}).populate('from') // 填充from字段.populate('reply.to reply.from') // 填充reply字段下的to和from
注意:reply下的字段to和from的填充,并不是mongoose官文populate章节中的多级填充。
// file: comment-model.js
Coment.findOne({}).populate({path: 'from', populate: {path: 'friends'}})
填充from字段查询出来的结果中的friends字段才是多级填充。
多级指的是需要填充的字段是在查询出来的数据对应的Schema中定义的。而第一个查询的填充类型的定义都是在comment-schema.js
中,无论是from字段还是reply下面的to和from。而第二个查询的字段from是在comment-schema.js
中定义,但是查询出来的document User 中的friends字段则是在user-schema.js中定义的。
我的理解是:准确的说多级是需要填充的字段是填充过后出现的。而字段的嵌套不能说是多级,至少我是这么认为的。
mongoose中的populate之多级填充,嵌套字段填充?相关推荐
- Mongoose 中使用 populate 实现关联查询
一.Mongoose populate 官方文档 https://mongoosejs.com/docs/populate.html 二.Mongoose populate 关联查询 1.定义 ref ...
- 如何在Mongoose中更新/更新文档?
本文翻译自:How do I update/upsert a document in Mongoose? Perhaps it's the time, perhaps it's me drowning ...
- 在报文摘要算法MD5中,首先要进行明文分组与填充,其中分组时明文报文摘要按照(42)位分组。【答案】C
在报文摘要算法MD5中,首先要进行明文分组与填充,其中分组时明文报文摘要按照(42)位分组. (42)A.128 B.256 C.512 D.1024 [答案]C [解析]本题考查报文摘要算法的基础知 ...
- scala条件替换_scala - 有没有办法用scala中的高阶方法替换嵌套的For循环 - SO中文参考 - www.soinside.com...
有没有办法用scala中的高阶方法替换嵌套的For循环 问题描述 投票:0回答:1 我有一个mutableList,并希望获取所有行的总和,并根据某些条件将其行替换为其他值.下面的代码对我来说工作正常 ...
- [html] html中p标签内为何不能嵌套div标签?
[html] html中p标签内为何不能嵌套div标签? p 是行内 div 是块级 个人简介 我是歌谣,欢迎和大家一起交流前后端知识.放弃很容易, 但坚持一定很酷.欢迎大家一起讨论 主目录 与歌谣一 ...
- php无极分类非递归_PHP中的无限级分类、无限嵌套评论
php中文网最新课程 每日17点准时技术干货分享 一般来说,递归被称为函数自身的调用. 递归在开发中的实际运用 N级分类 无限级的分类在平常的开发中是常见的需求,并且在不少面试题中都会碰到.不管你做什 ...
- Revit中绘图填充与模型填充的区别
一.Revit中绘图填充与模型填充的区别 在设完楼板的表现填充图案以后,在三潍视图中旋转模型,图案不跟随楼板旋转如图1所示.这种情况怎么解决? 遇到这种情况我们要知道绘图填充与模型填充的区别. (1) ...
- 【循序渐进学Python】Python中的循环(一)——for循环(嵌套)与range函数
[循序渐进学Python]Python中的循环(一)--for循环(嵌套)与range函数 在前面博客中我们介绍了Python程序结构的三要素,其中就提到了循环,而今天我们就来看看for循环和for循 ...
- Java中使用ItextPdf工具根据PDF合同模板填充pdf
Java中使用itextPdf工具根据PDF合同模板填充内容 设置PDF合同模板的文本域 导入itextPdf的pom依赖 编写生成填充pdf代码 1:设置PDF合同模板的文本域 设置PDF文本域 ...
最新文章
- 二三代基因组混合组装流程的搭建与香菇基因组精细图谱的获得
- python内置函数可以返回列表元组_Python内置函数()可以返回列表、元组、字典、集合、字符串以及range对象中元素个数....
- app后端设计(12)--图片的处理
- product category no need to optimize
- java类似php魔术方法_PHP与类有关的几个魔术方法
- 配置nginx作为静态资源服务器 css,js,image等资源直接访问
- 查询SQLSERVER执行过的SQL记录
- 海润光伏上年净利扭亏“摘帽”在望
- 信息学奥赛一本通(1218:取石子游戏)
- 《大话设计模式》——外观模式
- 创建你的第一个游戏Pong——让我们编写Pong
- 分割字符串函数strtok
- 美赛整理之Matlab读取全球海洋温度数据并显示干货
- Silverlight5 RC调用Win32API
- excel工作簿合并怎么处理?
- 资料:高等数学学习笔记——高等数学(二)学习笔记汇总
- 为UBUNTU安装一个像千千静听一样的MP3播放器
- jquery动态修改背景图片
- 微信动态表情保存到手机相册
- 叠加等边三角形的绘制 python_叠_叠是什么意思_叠字怎么读_叠的含义_叠字组词-新东方在线字典...
热门文章
- struts2.3.4 问题
- 二,八,十,十六进制之间转换的相应方法
- HDU-3065 病毒侵袭持续中 AC自动机又是一板子!
- Java中的使用了未经检查或不安全的操作
- SEL selector (二)
- 转载:闲话权限设计三层境界
- spring step 1 : 什么是spring
- 事件传递 java_将事件传递/发送到父组件?
- mysql中的replication_mysql中replication的相关问题总结
- vs无法写入量的大数据_一个每天服务数万人的企业食堂:自助餐按重计价,大数据支持食材预备量...