我希望在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并一次又一次地增加。这是对的吗?
答案 0 :(得分:1)
我不完全确定我理解这里的实际问题。您是否要求对架构设计提出第二意见?如果是这样,这是我的:
使用文档ID来保持集合之间的关系绝对没有错:就像你所做的那样。有时这是正确的(也是唯一的)方法,即使你必须自己承担维护关系/引用的责任,因为你可能知道,mongoDB不会帮助你。
但是,通过查看上面的示例模式来了解您的用例有点困难,但引起我注意的是工作对象。
我认为使用数组会更好 - 也许是这样:
works: [
{ "4d772583c186233352000002": 1 },
{ "4d772583c186233352000003": 3 }
]
通过这种方式,你可以更好地支持mongo维护你的引用,例如$ pull和$ push运算符。
但是我还想知道将外部id引用用作工作引用对象中的键。有关更多惯用对象,请考虑以下事项:
works : [
{ work_id: "4d772583c186233352000002", quantity: 1 },
{ work_id: "4d772583c186233352000003", quantity: 3 }
]
这有帮助吗?