在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之多级填充,嵌套字段填充?相关推荐

  1. Mongoose 中使用 populate 实现关联查询

    一.Mongoose populate 官方文档 https://mongoosejs.com/docs/populate.html 二.Mongoose populate 关联查询 1.定义 ref ...

  2. 如何在Mongoose中更新/更新文档?

    本文翻译自:How do I update/upsert a document in Mongoose? Perhaps it's the time, perhaps it's me drowning ...

  3. 在报文摘要算法MD5中,首先要进行明文分组与填充,其中分组时明文报文摘要按照(42)位分组。【答案】C

    在报文摘要算法MD5中,首先要进行明文分组与填充,其中分组时明文报文摘要按照(42)位分组. (42)A.128 B.256 C.512 D.1024 [答案]C [解析]本题考查报文摘要算法的基础知 ...

  4. scala条件替换_scala - 有没有办法用scala中的高阶方法替换嵌套的For循环 - SO中文参考 - www.soinside.com...

    有没有办法用scala中的高阶方法替换嵌套的For循环 问题描述 投票:0回答:1 我有一个mutableList,并希望获取所有行的总和,并根据某些条件将其行替换为其他值.下面的代码对我来说工作正常 ...

  5. [html] html中p标签内为何不能嵌套div标签?

    [html] html中p标签内为何不能嵌套div标签? p 是行内 div 是块级 个人简介 我是歌谣,欢迎和大家一起交流前后端知识.放弃很容易, 但坚持一定很酷.欢迎大家一起讨论 主目录 与歌谣一 ...

  6. php无极分类非递归_PHP中的无限级分类、无限嵌套评论

    php中文网最新课程 每日17点准时技术干货分享 一般来说,递归被称为函数自身的调用. 递归在开发中的实际运用 N级分类 无限级的分类在平常的开发中是常见的需求,并且在不少面试题中都会碰到.不管你做什 ...

  7. Revit中绘图填充与模型填充的区别

    一.Revit中绘图填充与模型填充的区别 在设完楼板的表现填充图案以后,在三潍视图中旋转模型,图案不跟随楼板旋转如图1所示.这种情况怎么解决? 遇到这种情况我们要知道绘图填充与模型填充的区别. (1) ...

  8. 【循序渐进学Python】Python中的循环(一)——for循环(嵌套)与range函数

    [循序渐进学Python]Python中的循环(一)--for循环(嵌套)与range函数 在前面博客中我们介绍了Python程序结构的三要素,其中就提到了循环,而今天我们就来看看for循环和for循 ...

  9. Java中使用ItextPdf工具根据PDF合同模板填充pdf

    Java中使用itextPdf工具根据PDF合同模板填充内容 设置PDF合同模板的文本域 导入itextPdf的pom依赖 编写生成填充pdf代码 1:设置PDF合同模板的文本域 ​ 设置PDF文本域 ...

最新文章

  1. 二三代基因组混合组装流程的搭建与香菇基因组精细图谱的获得
  2. python内置函数可以返回列表元组_Python内置函数()可以返回列表、元组、字典、集合、字符串以及range对象中元素个数....
  3. app后端设计(12)--图片的处理
  4. product category no need to optimize
  5. java类似php魔术方法_PHP与类有关的几个魔术方法
  6. 配置nginx作为静态资源服务器 css,js,image等资源直接访问
  7. 查询SQLSERVER执行过的SQL记录
  8. 海润光伏上年净利扭亏“摘帽”在望
  9. 信息学奥赛一本通(1218:取石子游戏)
  10. 《大话设计模式》——外观模式
  11. 创建你的第一个游戏Pong——让我们编写Pong
  12. 分割字符串函数strtok
  13. 美赛整理之Matlab读取全球海洋温度数据并显示干货
  14. Silverlight5 RC调用Win32API
  15. excel工作簿合并怎么处理?
  16. 资料:高等数学学习笔记——高等数学(二)学习笔记汇总
  17. 为UBUNTU安装一个像千千静听一样的MP3播放器
  18. jquery动态修改背景图片
  19. 微信动态表情保存到手机相册
  20. 叠加等边三角形的绘制 python_叠_叠是什么意思_叠字怎么读_叠的含义_叠字组词-新东方在线字典...

热门文章

  1. struts2.3.4 问题
  2. 二,八,十,十六进制之间转换的相应方法
  3. HDU-3065 病毒侵袭持续中 AC自动机又是一板子!
  4. Java中的使用了未经检查或不安全的操作
  5. SEL selector (二)
  6. 转载:闲话权限设计三层境界
  7. spring step 1 : 什么是spring
  8. 事件传递 java_将事件传递/发送到父组件?
  9. mysql中的replication_mysql中replication的相关问题总结
  10. vs无法写入量的大数据_一个每天服务数万人的企业食堂:自助餐按重计价,大数据支持食材预备量...