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数据库程序设计有所帮助。
上一篇: 一加9r对比红米k40哪个值得买?
下一篇: MySQL带你秒懂索引下推
推荐阅读
-
mysql实现查询数据并根据条件更新到另一张表的方法示例
-
MongoDB 中数据的替换方法实现 --类Replace()函数功能
-
Laravel Eloquent分表方法并使用模型关联的实现
-
flask/django 动态查询表结构相同表名不同数据的Model实现方法
-
thinkPHP5框架实现分页查询功能的方法示例
-
jQuery EasyUI的TreeGrid查询功能实现方法
-
MySQL 多表关联一对多查询实现取最新一条数据的方法示例
-
Laravel5中实现模糊匹配加多条件查询功能的方法
-
python操作mongodb根据_id查询数据的实现方法
-
MongoDB中数据的替换方法实现类Replace()函数功能详解