0

寻找有关以下内容的一些输入。希望这对版主来说不是太主观。

刚开始使用 deployd.com BaaS API 并有以下场景。

如果一个移动应用程序有一个组对象和一个用户,其中一个用户可以属于许多组,并且组有很多用户(多对多关系),我可以用我正在考虑的两种方式来设计这几种方式:

一个)

Users [{
  id: 1,
  groups : {1,2,3,4}
}]

Groups [{
  id: 1,
  users : {1,2,3,4}
}]

二)

Users [{
   id: 1
}]

Groups [{
   id: 1
}]

UserGroups [{
   id: 1,
   group: 1,
   user: 1,
 },{
   id: 2
   group: 1,
   user: 2,
}]

我倾向于 B,因为我可以存储元数据(用户加入组的日期等),但这似乎更像是一种 RDBMS 方法,我想知道我是否会因为尝试而失去 NoSQL 的任何好处建立这样的关系。

假设这个移动应用程序将被成千上万的移动用户同时使用,因此首先选择 NoSQL 与 RDBMS。

4

1 回答 1

1

B) 不是一个好主意。MongoDB 不做连接,因此任何需要多个集合的操作都意味着多个后续查询,这比关系数据库中的数据库内部 JOIN 慢得多。这意味着您应该将关系存储在文档本身中。

当您想要存储元信息时,请记住数组不能只存储原始值。他们还可以存储对象。例子:

{
    id:1,
    name:"Bob",
    groups: [
        { name: "nice people",
          position: "member",
          joined: ISODate(2013, 12, 3)
        } ,
        { name: "evil people",
          position: "admin",
          joined: ISODate(2012, 11, 22)
        }

    ]
}

存储足够的元信息可能是个好主意,这样可以在不查询引用对象的情况下完成许多常见查询。如果您想在某人查找用户配置文件时显示组列表,并且您在用户文档中的概览中存储您需要的所有组信息,您就不必进行第二次查询来检索组文档。

于 2013-12-08T18:53:20.217 回答