MongoDB关联查询
Posted 张悟空
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MongoDB关联查询相关的知识,希望对你有一定的参考价值。
目录
Aggregate
- 在 MongoDB 中属于重量级工具
- pipeline 管道模型理论:后面操作的数据源来源于上一次操作的结果
- pipeline aggregate stages
$project // 指定获取字段
$match // 筛选
$redact
$limit
$skip
$unwind
$group
$sample
$sort
$geoNear
$lookup // 关联
$out
$indexStats
$lookup 关联表
product 表:
_id | productname | price
--- | --- | ---
1.0 | 商品1 | 15.0
2.0 | 商品2 | 36.0
orders 表:
_id | pid | ordername
---|--- | ---
1.0 | 1.0 | 订单1
2.0 | 2.0 | 订单2
3.0 | 3.0 | 订单3
4.0 | 4.0 | 订单4
db.product.aggregate([
{
$lookup:
{
from: "orders", // 需要关联的表
localField: "_id", // product 表需要关联的键
foreignField: "pid", // orders 的 matching key
as: "inventory_docs" // 对应的外键集合的数据
}
}
])
$match 筛选数据
// 筛选出价格 大于 20 的商品
db.product.aggregate([
{
$lookup: {
from: "orders", // 需要关联的表
localField: "_id", // product 表需要关联的键
foreignField: "pid", // orders 的 matching key
as: "inventory_docs" // 对应的外键集合的数据
}
},
{
$match: {
price: { $gt:20 }
}
}
])
$project 指定获取字段
// 价格大于 20 的订单
db.product.aggregate([
{
$lookup: {
from: "orders", // 需要关联的表
localField: "_id", // product 表需要关联的键
foreignField: "pid", // orders 的 matching key
as: "inventory_docs" // 对应的外键集合的数据
}
},
{
$match: {
price: { $gt:20 }
}
},
{
$project:{
"inventory_docs": 1,
"_id": 0
}
}
])
以上是关于MongoDB关联查询的主要内容,如果未能解决你的问题,请参考以下文章
MongoDB 中的关联查询MongoDB : aggregate/lookup 对比 Mongoose : ref / populate