MongoDB 可过滤动态属性的最佳架构?

MongoDB best schema for filterable, dynamic attributes?

我有大量用户。每个用户都可以有角色。我希望能够根据用户拥有的角色来过滤用户。以下两种方法之间是否存在性能差异?我可以想象第二种方法更快,更适合我的用例。我还假设第二个索引会更小。有任何想法吗?谢谢!

数组逼近

{
  name: "Paul",
  roles: [
    "system administrator",
    "network administrator",
    "solutions architect"
  ]
}

属性方法

{
  name: "Paul",
  roles: {
    system_administrator: true,
    network_administrator: true
    solutions_architect: true
  }
}

第一种方法更好,因为您可以使用 $push$pull 等数组运算符轻松 add/remove/update 数组中的 roles

此外,索引第一种类型更容易,因为您只需索引 roles 字段。

对于下一个选项,如果你想专门为每一种类型的角色建立索引,你将不得不创建很多索引。

所以我投第一票!