我可以在mongodb的集合中放入许多键

时间:2011-03-09 08:43:05

标签: mongodb

我希望在mongodb中存储类似哈希的值。

有两个收藏,人和工作。一个人有一些数量的作品。另一个集合中的工作存储有更多细节(可能参考其他集合)。

例如。人(吉姆)有一部作品(a)和三部作品(b)。

// Person
{
    _id: "4d772583c186233352000001"
    name: "Jim"
    works: {
        "4d772583c186233352000002": 1
        "4d772583c186233352000003": 3
        ...
    }
}

// Work
{
    _id: "4d772583c186233352000002"
    title: "Make cake"
    finished_at: ...
}
{
    _id: "4d772583c186233352000003"
    title: "Make iPhone"
    finished_at: ...
}
...

如果我存储上述人的作品属性。人员关键路径将包括工作的ID并一次又一次地增加。这是对的吗?

1 个答案:

答案 0 :(得分:1)

我不完全确定我理解这里的实际问题。您是否要求对架构设计提出第二意见?如果是这样,这是我的:

使用文档ID来保持集合之间的关系绝对没有错:就像你所做的那样。有时这是正确的(也是唯一的)方法,即使你必须自己承担维护关系/引用的责任,因为你可能知道,mongoDB不会帮助你。

但是,通过查看上面的示例模式来了解您的用例有点困难,但引起我注意的是工作对象。

我认为使用数组会更好 - 也许是这样:

 works: [
        { "4d772583c186233352000002": 1 },
        { "4d772583c186233352000003": 3 }
 ]

通过这种方式,你可以更好地支持mongo维护你的引用,例如$ pull和$ push运算符。

但是我还想知道将外部id引用用作工作引用对象中的键。有关更多惯用对象,请考虑以下事项:

works : [
     { work_id: "4d772583c186233352000002", quantity: 1 },
     { work_id: "4d772583c186233352000003", quantity: 3 }
]

这有帮助吗?