本文实例讲述了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,关联表,查询
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新动态
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]