2

这些天我正在学习 MongoDB。我发现 MongoDB 不支持加入。我只想知道为什么MongoDB选择这样做?

提前致谢..

4

3 回答 3

4
  1. Mongo - 不是关系数据库,没有物理关系和约束。
  2. 加入会扼杀可扩展性。

通常非规范化替换 sql join。

例如,在 stackoverflow 上你有问题和他的所有者,在 mongodb 中,将所有者数据去规范化并避免加入是正常的情况:

question
{
  _id,
  text,
  user_short :
  {
    id,
    full_name
  }
}

这肯定会导致更新的额外复杂性,但它会在您读取数据时显着提高性能。对于大多数应用程序而言,读取率为 95%,而写入率仅为 5% 甚至更少。

于 2012-08-30T06:33:13.927 回答
2

因为 MongoDb 是一个非关系型数据库。非关系数据库不支持连接,这是设计使然。

于 2012-08-30T06:32:56.783 回答
1

您现在可以在 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
   }}
)
于 2017-01-12T02:45:11.110 回答