联系人的MongoDB模式优化

联系人的MongoDB模式优化,mongodb,Mongodb,我像这样在mongodb中存储联系人,但这种模式的主要缺点是由于16mb的限制,我无法在一个文档中存储40k-50k联系人 我现在想更改我的模式。所以谁能给我建议一下重新设计这个的最佳方法呢 这是我的样品文件 { "_id" : ObjectId("5c53653451154c6da4623a77"), "contacts" : [{ name:"", email:"", group:[5c53653451154c6da462

我像这样在mongodb中存储联系人,但这种模式的主要缺点是由于16mb的限制,我无法在一个文档中存储40k-50k联系人

我现在想更改我的模式。所以谁能给我建议一下重新设计这个的最佳方法呢

这是我的样品文件

{
    "_id" : ObjectId("5c53653451154c6da4623a77"),
    "contacts" : [{
         name:"",
         email:"",
         group:[5c53653451154c6da4623a79]
    }],
    "groups" : [{
         _id: ObjectId("5c53653451154c6da4623a79"),
         group_name:"test"
     }],
}

根据您的文档示例,
联系人
属于

在这种情况下,有不同的方法可以得到更好的模式:

1-文档嵌入:

每个
文档中都有一组
联系人

集合

{
    "_id": ObjectId("5c53653451154c6da4623a79"),
    "group_name":"test",
    "contacts": [
        {
            "name":"something",
            "email":"something",
        },         
        {
            "name":"something else",
            "email":"something else",
        }
    ]
}
{
    "_id" : ObjectId("5c53653451154c6da4623a77"),
    "name":"something",
    "email":"something",
    "groups":["5c53653451154c6da4623a79"]
},
{
    "_id" : ObjectId("5c536s7df9sd7f987d9s7d98"),
    "name":"something else",
    "email":"something else",
    "groups":["5c53653451154c6da4623a79"]
}

{
    "_id": ObjectId("5c53653451154c6da4623a79"),
    "group_name":"test"
}
2-文档引用:

您将拥有两个集合—
联系人
——并在每个
联系人
中存储一个组引用

收集联系人

{
    "_id": ObjectId("5c53653451154c6da4623a79"),
    "group_name":"test",
    "contacts": [
        {
            "name":"something",
            "email":"something",
        },         
        {
            "name":"something else",
            "email":"something else",
        }
    ]
}
{
    "_id" : ObjectId("5c53653451154c6da4623a77"),
    "name":"something",
    "email":"something",
    "groups":["5c53653451154c6da4623a79"]
},
{
    "_id" : ObjectId("5c536s7df9sd7f987d9s7d98"),
    "name":"something else",
    "email":"something else",
    "groups":["5c53653451154c6da4623a79"]
}

{
    "_id": ObjectId("5c53653451154c6da4623a79"),
    "group_name":"test"
}
集合

{
    "_id": ObjectId("5c53653451154c6da4623a79"),
    "group_name":"test",
    "contacts": [
        {
            "name":"something",
            "email":"something",
        },         
        {
            "name":"something else",
            "email":"something else",
        }
    ]
}
{
    "_id" : ObjectId("5c53653451154c6da4623a77"),
    "name":"something",
    "email":"something",
    "groups":["5c53653451154c6da4623a79"]
},
{
    "_id" : ObjectId("5c536s7df9sd7f987d9s7d98"),
    "name":"something else",
    "email":"something else",
    "groups":["5c53653451154c6da4623a79"]
}

{
    "_id": ObjectId("5c53653451154c6da4623a79"),
    "group_name":"test"
}
为什么我们在
联系人
中引用
,而不是相反?因为我们的
联系人
可能比
多。这样我们就有了更小的文档和更小的“引用数组”


您将遵循的路径在很大程度上取决于每个
组有多少
联系人。如果这个数字很小,我会采用文档嵌入方法,以简化和易于访问。如果每个
组有大量
联系人
,我会使用文档参考,以获得较小的文档。

非常感谢。我会选择第二个,因为我每个小组都有更多的联系。