MongoDB多表关联查询操作实例详解
MongoDB作为非关系型数据库,虽然没有传统关系型数据库的多表关联查询语句,但我们可以利用一些技巧来实现关联查询。
一、使用$lookup关联查询操作
- 创建两个集合
我们以一个订单和一个客户集合为例,在MongoDB中用以下语句创建两个集合:
db.createCollection("orders")
db.createCollection("customers")
- 往订单集合插入数据
以以下数据为例,向orders集合中插入若干数据:
{
"_id" : 1,
"name" : "order01",
"customerId" : 1
}
{
"_id" : 2,
"name" : "order02",
"customerId" : 2
}
其中customerId是与customers集合中相同记录的_id字段关联的字段。
- 往客户集合插入数据
以下为customers集合中的数据:
{
"_id" : 1,
"name" : "customer01"
}
{
"_id" : 2,
"name" : "customer02"
}
- 使用$lookup关联查询操作
使用以下语句进行关联查询:
db.orders.aggregate([
{
$lookup:
{
from: "customers",
localField: "customerId",
foreignField: "_id",
as: "customer"
}
}
])
查询结果为:
{
"_id" : 1,
"name" : "order01",
"customerId" : 1,
"customer" : [
{
"_id" : 1,
"name" : "customer01"
}
]
}
{
"_id" : 2,
"name" : "order02",
"customerId" : 2,
"customer" : [
{
"_id" : 2,
"name" : "customer02"
}
]
}
二、使用DBRef实现多表关联查询操作
DBRef是MongoDB中单个文档中多个集合关联的语法规范。DBRef只是一个简短的对象,由两个字段组成:$ref - 关联的集合名称,$id - 关联记录的_id字段值。
- 创建两个集合
我们以一个订单和一个客户集合为例,在MongoDB中用以下语句创建两个集合:
db.createCollection("orders")
db.createCollection("customers")
- 往订单集合插入数据
以以下数据为例,向orders集合中插入若干数据:
{
"_id" : 1,
"name" : "order01",
"customer" : {
"$ref" : "customers",
"$id" : 1
}
}
{
"_id" : 2,
"name" : "order02",
"customer" : {
"$ref" : "customers",
"$id" : 2
}
}
- 往客户集合插入数据
以下为customers集合中的数据:
{
"_id" : 1,
"name" : "customer01"
}
{
"_id" : 2,
"name" : "customer02"
}
- 使用DBRef实现多表关联查询操作
使用以下语句进行关联查询:
db.orders.find()
.populate("customer", "_id name")
.exec(function(err, orders) {
console.log(orders)
});
查询结果为:
{
"_id" : 1,
"name" : "order01",
"customer" : {
"_id" : 1,
"name" : "customer01"
}
}
{
"_id" : 2,
"name" : "order02",
"customer" : {
"_id" : 2,
"name" : "customer02"
}
}
以上就是MongoDB多表关联查询操作实例的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MongoDB多表关联查询操作实例详解 - Python技术站