Mongodb实现的关联表查询功能【population方法】

发布时间 - 2026-01-11 02:25:51    点击率:

本文实例讲述了Mongodb实现的关联表查询功能。分享给大家供大家参考,具体如下:

Population

MongoDB是非关联数据库。但是有时候我们还是想引用其它的文档。这就是population的用武之地。

Population是从其它文档替换文档中的特定路径。我们可以迁移一个单一的文件,多个文件,普通对象,多个普通的对象,或从查询中返回的所有对象

populate 方法

populate 方法可以用在 document 上、 model 上或者是 query 对象上,这意味着你几乎可以在任何地方调用这个方法以填充你的引用字段。

当然,populate 方法在不同对象上参数不大一样,但是都接收一个option的参数,你可以用这些参数指定:

语法:Query.populate(path, [select], [model], [match], [options])

path:以空格分隔的引用字段的名称 String 或 Object类型,
String 类型的时, 指定要填充的关联字段,要填充多个关联字段可以以空格分隔。
Object 类型的时,就是把 populate 的参数封装到一个对象里。当然也可以是个数组

select: Object 或 String ,可选,指定填充 document 中的哪些字段。
Object 类型的时,格式如: {name: 1, _id: 0} ,为 0 表示不填充,为 1 时表示填充。
String 类型的时,格式如: "name -_id" ,用空格分隔字段,在字段名前加上 -表示不填充。详细语法介绍 query-select

match: 可选,指定附加的查询条件

model: 可选,指定关联字段的 model,如果没有指定就会使用 Schema的 ref

options:  Object 可选,指定附加的其他查询选项,如排序以及条数限制等等

引用字段的类型

目前,Mongoose 只支持以下几种引用字段的类型:

ObjectId
Number
String
Buffer

而且自然而然,引用 document 的主键类型必须和引用字段类型相对应。在生产环境中,推荐主键类型和引用类型都使用 ObjectId ,一是因为 ObjectId 不包含业务含义,二是 ObjectId 不大可能重复,三是因为 Mongoose 默认生成的主键类型就是 ObjectId ,可以减少很多配置的操作。

例子

Scheme先定义好,关联属性

AScheme:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var AScheme= new Schema({
  name: {
    type: String,
    default: ''
  }
},{collection: 'a'});
module.exports = mongoose.model('A', CountSchema);

BScheme:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var BScheme= new Schema({
  name: {
    type: String,
    default: ''
  },
  age:{
    type:Number
  }
  aid: {
     type: mongoose.Schema.ObjectId,//如果AScheme的_id type为String,这里对应写String
     ref:'A'
  }
},{collection: 'b'});
module.exports = mongoose.model('B', CountSchema);

关联查询

AModel.find().populate({path: 'aid', select: {name: 1,_id:0}}).exec(function(err, a) {
  if (err) res.send(err);
  console.log(a);
});
//
AModel.find(...).populate({ path: 'aid', match: { age: { $gte: 21 }}, select: 'name -_id', options: { limit: 5 } }) .exec()

更多相关内容还可参考:http://mongoosejs.com/docs/api.html#model_Model.populate

希望本文所述对大家MongoDB数据库程序设计有所帮助。


# Mongodb  # 关联表  # 查询  # MongoDB多表关联查询操作实例详解  # MongoDB中多表关联查询($lookup)的深入讲解  # 教你使用mongoose实现多集合关联查询  # 可选  # 多个  # 主键  # 文档  # 就会  # 是个  # 相关内容  # 这就是  # 一是  # 可以用  # 是从  # 我们可以  # 三是  # 给大家  # 如果没有  # 用武之地  # 或者是  # 几种  # 还可  # 用在 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: EditPlus中的正则表达式 实战(4)  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  米侠浏览器网页背景异常怎么办 米侠显示修复  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  怎样使用JSON进行数据交换_它有什么限制  如何用PHP快速搭建CMS系统?  Laravel如何实现数据库事务?(DB Facade示例)  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  大连 网站制作,大连天途有线官网?  如何在云主机上快速搭建多站点网站?  音乐网站服务器如何优化API响应速度?  iOS正则表达式验证手机号、邮箱、身份证号等  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南  如何快速生成高效建站系统源代码?  高性价比服务器租赁——企业级配置与24小时运维服务  重庆市网站制作公司,重庆招聘网站哪个好?  HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】  浅谈Javascript中的Label语句  Thinkphp 中 distinct 的用法解析  Android自定义控件实现温度旋转按钮效果  如何快速搭建支持数据库操作的智能建站平台?  原生JS实现图片轮播切换效果  网站页面设计需要考虑到这些问题  Laravel如何处理表单验证?(Requests代码示例)  使用spring连接及操作mongodb3.0实例  Laravel如何使用Blade模板引擎?(完整语法和示例)  网站建设要注意的标准 促进网站用户好感度!  文字头像制作网站推荐软件,醒图能自动配文字吗?  Laravel怎么连接多个数据库_Laravel多数据库连接配置  怎么用AI帮你为初创公司进行市场定位分析?  如何用景安虚拟主机手机版绑定域名建站?  如何在企业微信快速生成手机电脑官网?  利用python获取某年中每个月的第一天和最后一天  详解Oracle修改字段类型方法总结  微信小程序 闭包写法详细介绍  BootStrap整体框架之基础布局组件  ChatGPT 4.0官网入口地址 ChatGPT在线体验官网  Claude怎样写约束型提示词_Claude约束提示词写法【教程】  Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程  Laravel如何实现模型的全局作用域?(Global Scope示例)  使用豆包 AI 辅助进行简单网页 HTML 结构设计  Laravel如何处理和验证JSON类型的数据库字段  悟空浏览器如何设置小说背景色_悟空浏览器背景色设置【方法】  Laravel如何编写单元测试和功能测试?(PHPUnit示例)  如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】  宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程  Laravel如何实现API资源集合?(Resource Collection教程)  laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法  如何用PHP快速搭建高效网站?分步指南