为什么MongoDB中没有连接关系?

时间:2012-08-30 06:28:18

标签: mongodb

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

提前感谢..

3 个答案:

答案 0 :(得分:3)

  1. Mongo - 不是关系数据库,没有物理关系和约束。
  2. 加入杀戮可扩展性。
  3. 通常非规范化取代sql join。

    例如,在stackoverflow上你有问题和他的拥有者,在mongodb中通常情况下将所有者数据变为问题并避免加入:

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

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

答案 1 :(得分:1)

因为MongoDb是一个非关系型数据库。非关系数据库不支持通过设计加入。

答案 2 :(得分:0)

您现在可以使用$lookup

在Mongo 3.2中执行此操作

$lookup需要四个参数

from:指定同一数据库中的集合以执行连接。 from集合无法分片。

localField:指定输入到$ lookup阶段的文档中的字段。 $ lookup通过from集合的文档在localField上执行与foreignField的相等匹配。

foreignField:指定from集合中文档的字段。

as:指定要添加到输入文档的新数组字段的名称。新数组字段包含来自集合的匹配文档。

db.Foo.aggregate(
  {$unwind: "$bars"},
  {$lookup: {
    from:"bar",
    localField: "bars",
    foreignField: "_id",
    as: "bar"

   }},
   {$match: {
    "bar.testprop": true
   }}
)