服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - MongoDB - Mongodb实现的关联表查询功能【population方法】

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

2020-05-14 14:45IT姑凉 MongoDB

这篇文章主要介绍了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:

?
1
2
3
4
5
6
7
8
9
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:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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);

关联查询

?
1
2
3
4
5
6
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数据库程序设计有所帮助。

延伸 · 阅读

精彩推荐
  • MongoDBMongoDB 简单入门教程(安装、基本概念、创建用户)

    MongoDB 简单入门教程(安装、基本概念、创建用户)

    这篇文章主要介绍了MongoDB 简单入门教程(安装、基本概念、创建用户)的相关资料,帮助大家更好的理解和学习使用MongoDB数据库,感兴趣的朋友可以了解下...

    AsiaYe6352021-05-10
  • MongoDBMongo服务重启异常问题的处理方法

    Mongo服务重启异常问题的处理方法

    这篇文章主要给大家介绍了关于Mongo服务重启异常问题的处理方法,这个问题其实还是挺常见的,通过此文学习处理方法,以后遇到了就不会措手不及的,需要的...

    Leafage11842021-08-24
  • MongoDBMongodb如何开启用户访问控制详解

    Mongodb如何开启用户访问控制详解

    默认启动 MongoDB 服务时没有任何参数,可以对数据库任意操 作,而且可以远程访问数据库,所以推荐开发阶段可以不设置任何参数,但对于生产环境还是要...

    不争5402020-05-10
  • MongoDBMongoDB 学习笔记

    MongoDB 学习笔记

    最近在学习MongoDB,小结一下,主要都是一些基础知识,需要的朋友可以参考下 ...

    服务器之家3412020-04-25
  • MongoDBMongoDB分片测试

    MongoDB分片测试

    分片是mongoDB扩展的一种方式。分片分割一个collection并将不同的部分存储在不同的机器上,本文给大家介绍MongoDB分片测试,需要的朋友参考下吧 ...

    我思,故我在5532020-05-05
  • MongoDBMongodb数据库误删后的恢复方法(两种)

    Mongodb数据库误删后的恢复方法(两种)

    本文给大家分享两种方法来实现Mongodb数据库误删后的恢复,每种方法给大家介绍的都非常详细,需要的朋友参考下吧 ...

    fyg05249922020-05-18
  • MongoDB将MongoDB加入到Windows的本地服务项的方法

    将MongoDB加入到Windows的本地服务项的方法

    下面主要针对MongoDB在Windows下加入本地服务项做一些简单的分享。以方便刚接触MongoDB并在Windows环境下进行开发的同学 ...

    MongoDB教程网3012020-04-28
  • MongoDBMongoDB简单操作示例【连接、增删改查等】

    MongoDB简单操作示例【连接、增删改查等】

    这篇文章主要介绍了MongoDB简单操作,涉及命令行窗口下使用MongoDB进行简单的连接、增删改查等相关操作技巧,需要的朋友可以参考下 ...

    tinyphp2982020-05-23