【发布时间】:2013-02-19 03:43:37
【问题描述】:
我有一个名为 Org 的集合,其中包含在团队之间共享的资源 (Resources 架构) (Teams 架构)
{
"_id": ObjectId("511cfbc9d593e5290c000005"),
"name": "Some org name",
"resources": [
{
"_id": ObjectId("511cfbc9d593e5290c000007"),
"name": "Printer1",
/* mongoose.Schema.Types.Mixed */
"details": {
"ip": "192.168.1.99"
}
}, {
"_id": ObjectId("511cfbc9d593e5290c000008")
"name": "Fax1",
"details": {
"number": "XXXXXXXXXXXX"
}
}
],
"teams" : [
{
"_id": ObjectId("511cfbc9d593e5290c000012"),
"name": "sales",
/*"resources": {type: [mongoose.Schema.Types.ObjectId], ref: 'Resources'}*/
"resources": [ObjectId("511cfbc9d593e5290c000007")]
}, {
"_id": ObjectId("511cfbc9d593e5290c000006"),
"name": "developer",
"resources": [ObjectId("511cfbc9d593e5290c000007"), ObjectId("511cfbc9d593e5290c000008")]
}
]
}
还有一个People 集合,它是团队的一部分。
{
"name": "Peter",
"designation": "senior s/w engg.",
"contact": {}
/*"teams": {type: [mongoose.Schema.Types.ObjectId], ref: 'Teams'}*/
"teams": [ObjectId("511cfbc9d593e5290c000006")]
}
现在,如果资源或团队发生更改,我希望跳过多次更新,因此我没有使用嵌套文档。我无法从 Teams 架构中获得 ref Resources 架构。结果,要获得以下结果,我必须通过非常复杂的聚合函数。
{
"name": "Peter",
"designation": "senior s/w engg.",
"contact": {}
"teams": [{
"_id": ObjectId("511cfbc9d593e5290c000006"),
"name": "developer",
"resources": [{
"_id": ObjectId("511cfbc9d593e5290c000007"),
"name": "Printer1",
"details": {
"ip": "192.168.1.99"
}
}, {
"_id": ObjectId("511cfbc9d593e5290c000008")
"name": "Fax1",
"details": {
"number": "XXXXXXXXXXXX"
}
}]
}]
}
能否请一些人建议我是否在数据库设计中做错了什么。有没有更简单的方法?
【问题讨论】:
标签: javascript mongodb mongoose