千家信息网

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

发表于:2025-02-04 作者:千家信息网编辑
千家信息网最后更新 2025年02月04日,本文实例讲述了Mongodb实现的关联表查询功能。分享给大家供大家参考,具体如下:PopulationMongoDB是非关联数据库。但是有时候我们还是想引用其它的文档。这就是population的用武
千家信息网最后更新 2025年02月04日Mongodb实现的关联表查询功能【population方法】

本文实例讲述了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数据库程序设计有所帮助。

类型 字段 关联 对象 查询 方法 参数 多个 就是 文档 空格 普通 不大 数据 数据库 文件 格式 语法 参考 附加 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 论软件开发的现状 如何用指令做空岛服务器 学会数据库没找到工作 进电厂好还是网络安全工程师好 软件开发工程师地域分析 征途单机数据库连接失败 贵州信息安全学习网络安全 广州众合网络技术科技有限公司 网站数据库备份有什么用 四川省市县财政网络安全规范 服务器备案要营业执照吗 游戏软件开发前景 存储服务器远程管理网口 数据库多表查询每位同学的平均分 网络安全意识防范2000字 公安网络安全执法大检查 服务器与运维管理证书 黄浦区网络安全审计系统咨询价格 网络安全独一无二的产品 杨浦区个人数据库研发诚信服务 青阳微型软件开发服务有几种 湖北诺壹行网络技术服务有限 软件开发测试管理经验总结 互联网法院高科技取号机 app唱歌软件开发 用友账套数据库在哪里 云计算技术应用计算机网络技术 远程服务器失败 国家负责统筹协调网络安全 甘肃省委关于网络安全
0