当前位置: 首页 > 编程笔记 >

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

吴单鹗
2023-03-14
本文向大家介绍Mongodb实现的关联表查询功能【population方法】,包括了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数据库程序设计有所帮助。

 类似资料:
  • 本文向大家介绍layUI实现列表查询功能,包括了layUI实现列表查询功能的使用技巧和注意事项,需要的朋友参考一下 layUI可以直接使用本地的json文件进行列表数据渲染,但,我们会发现,官网ctr+c ctr+v 过来的代码在做查询时每次看起来都有列表刷新的动作,但实际操作无效,百度了一大圈也没找到具体的原因,无奈继续回去看官网,后面总结出只有一点,也是大家比较容易忽略的一点: 官网说在查询时

  • 本文向大家介绍MongoDB多表关联查询操作实例详解,包括了MongoDB多表关联查询操作实例详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了MongoDB多表关联查询操作。分享给大家供大家参考,具体如下: Mongoose的多表关联查询 首先,我们回忆一下,MySQL多表关联查询的语句: student表: calss表: 通过student的classId关联进行查询学生名称,班级

  • 本文向大家介绍Vue.js实现分页查询功能,包括了Vue.js实现分页查询功能的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Vue.js实现分页查询的具体代码,供大家参考,具体内容如下 vue.js的使用如下: 1、引入vue.js    a、分页条     b、分页条js、css 2、分页的方法 3、封装page方法 4、定义获取总页数的方法 5、前台分页方法,获取后台的数据,实

  • 本文向大家介绍Yii2.0表关联查询实例分析,包括了Yii2.0表关联查询实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Yii2.0表关联查询的方法。分享给大家供大家参考,具体如下: 你可以使用 ActiveRecord 来进行关联查询(比如,从A表读取数据时把关联的B表数据也一起读出来), 在Active Record中,获取关联数据可以像访问主表ActiveRecord对象的

  • 本文向大家介绍MyBatis实现动态查询、模糊查询功能,包括了MyBatis实现动态查询、模糊查询功能的使用技巧和注意事项,需要的朋友参考一下 要实现查询,咱们就先有个数据库,截图如下,其中cityAreaId是外键,本次可以忽略; 下面Branches是我的实体类,里面有name和address属性; 接口中方法: MyBatis的接口映射文件的代码: 动态查询: 模糊查询: 然后就是main方

  • 本文向大家介绍Django自关联实现多级联动查询实例,包括了Django自关联实现多级联动查询实例的使用技巧和注意事项,需要的朋友参考一下 1 问题引出 我们在开发网站的时候可能会遇到这种情况,多个字段之间有一定的关联性,比如省市县,选择省,之后下一个选择框的值则为该省的市集合,选择市之后下一个选择框的值为该市的县集合。 一种实现方式是,建立三个模型表,用外键一对多方式,显然这样是不太合理的。Dj