mongodb中的均值数据库与关系数据库

mongodb中的均值数据库与关系数据库,mongodb,mean-stack,Mongodb,Mean Stack,我正在学习平均框架。我不明白为什么mongodb如此流行,以至于它是在框架中构建的,而您不能轻松地更改数据库(或者我可以吗?) 我的问题是 为什么在MEAN框架中使用mongodb 为什么在noSql和Sql数据库之间没有任何选择 MEAN框架(使用mongodb)是否仅适用于某些类型的web项目或任何类型的web项目 如何在mongodb中创建这个示例数据库 例如,如果我有这个关系数据库: User id name Car id user_id car_make_id

我正在学习平均框架。我不明白为什么mongodb如此流行,以至于它是在框架中构建的,而您不能轻松地更改数据库(或者我可以吗?)

我的问题是

  • 为什么在MEAN框架中使用mongodb
  • 为什么在noSql和Sql数据库之间没有任何选择
  • MEAN框架(使用mongodb)是否仅适用于某些类型的web项目或任何类型的web项目
  • 如何在mongodb中创建这个示例数据库
例如,如果我有这个关系数据库:

User
  id
  name

Car
  id
  user_id
  car_make_id      
  name

CarMake
  id
  Name
比查询更容易:

  • 让我看看用户和他的车。一个带有join的查询
  • 向我展示我系统中的所有汽车、车主及其类型。一个带有join的查询
  • 在mongodb中创建此数据库时:

    • 我失去了真正的数据库事务处理能力
    • 如何在mongodb中最好地实现该数据库?我可以使用相同的数据库结构,但速度会慢一些,因为在创建上述查询时,我必须向数据库发出更多请求。或者使用$lookup的查询将比sql数据库中的real join慢-我说的对吗
    我可以像这样更改数据库结构

    User
      id:
      name:
      cars: []
    
    Car
      id:
      car_make_id:
      name:
    
    CarMake
      id:
      Name:
    
    或者我可以像这样更改数据库结构。车辆列表嵌入在用户内部

    User
      id:
      name:
      cars:
      [
        {
          id:
          car_make_id:
          name:
        }
      ]
    
    CarMake
      id:
      Name:
    

    但我如何才能得到:让我看看我系统中的所有汽车,车主和他们的类型。你能帮我看看mongodb的世界吗?

    意思是堆栈基本上是用来创建单页应用程序的。并重点关注页面(我指的是应用程序的体系结构)

    1) 。mongoDb的最佳实践是为页面创建集合。这意味着如果一个页面使用多种类型的数据。如果您可以在集合中保存文档(在一个集合中包含多种类型的数据,但在某些情况下,我们需要进行嵌入),这会更好

    2) 。Mongodb使用JSON进行事务处理,并且很容易在javascript框架中使用

    3) 。Mongodb使用缓存(它使用RAM将最近的数据保存在内存中),就像javascript一样。因此,快速查询很容易(因为硬盘的IO更少)

    作为你的例子,你可以使用

    User:{id:
          name:
          cars:
          [
            {
              id:
              car_make_id:
              name:
            }
          ]}       
    
    
     CarMake:{
           id:
          Name:}
    

    因为您可以使用第一个集合的id进行索引。因为您可以一次检索所有数据。(如果嵌入集合。文档中的所有数据都在硬盘中的近块中。因此数据检索速度很快)

    在此数据库结构中。如何在系统中查看所有车辆?我必须检索所有用户并读取所有嵌入的汽车?不。您可以使用带有“cars.name”的distinct命令。或者,您可以使用聚合框架来实现这一点。但是当你设计数据库的时候。首先设计应用程序和数据库。(当我们使用关系数据库时,相反的事情。)如果你有帮助,请考虑接受答案。这将有助于其他人解决同样的问题。