这些天我正在学习 MongoDB。我发现 MongoDB 不支持加入。我只想知道为什么MongoDB选择这样做?
提前致谢..
通常非规范化替换 sql join。
例如,在 stackoverflow 上你有问题和他的所有者,在 mongodb 中,将所有者数据去规范化并避免加入是正常的情况:
question
{
_id,
text,
user_short :
{
id,
full_name
}
}
这肯定会导致更新的额外复杂性,但它会在您读取数据时显着提高性能。对于大多数应用程序而言,读取率为 95%,而写入率仅为 5% 甚至更少。
因为 MongoDb 是一个非关系型数据库。非关系数据库不支持连接,这是设计使然。
您现在可以在 Mongo 3.2 中使用$lookup
$lookup
接受四个参数
from
:指定同一数据库中的集合以执行连接。from 集合不能被分片。
localField
:指定从文档输入到 $lookup 阶段的字段。$lookup 对 from 集合的文档中的 localField 到 foreignField 执行相等匹配。
foreignField
:指定来自集合中文档的字段。
as
:指定要添加到输入文档的新数组字段的名称。新的数组字段包含来自 from 集合的匹配文档。
db.Foo.aggregate(
{$unwind: "$bars"},
{$lookup: {
from:"bar",
localField: "bars",
foreignField: "_id",
as: "bar"
}},
{$match: {
"bar.testprop": true
}}
)