加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 服务器 > 系统 > 正文

Mongodb中怎样实现关联表查询,用啥方法

发布时间:2023-09-20 16:01:42 所属栏目:系统 来源:
导读:  在这篇文章中,我们来学习一下“Mongodb中怎样实现关联表查询,用什么方法”的相关知识,下文有详细的讲解,易于大家学习和理解,有需要的朋友可以借鉴参考,下面就请大家跟着小编的思路一起来学习一下
  在这篇文章中,我们来学习一下“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()
 
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章