由于mongodb不支持加入,我需要搜索各种业务集合,服务和用户,我提出了一个解决方案,但我需要对其进行验证和/或改进。
该计划的流程如下:
Business = Schema({
name:String
services:[{
type:ObjectId,
ref:'Services'
}],
specialist:[{
type:ObjectId,
ref:'User'
}]
})
User = Schema({
full_name:String
businesses:[{
_id:{
type:ObjectId,
ref:'Business'
},
name:String,
role:String,
is_owner:Boolean
}]
})
Service = Schema({
name:String,
business:{
type:ObjectId,
ref:'Business'
},
specialist:[{
type:ObjectId,
ref:'User'
}]
})
Search = Schema({
text:{
type:String,
index:'text'
},
business:{
_id:{
type:ObjectId,
ref:'Business'
},
name:String
},
services:[{
_id:{
type:ObjectId,
ref:'Service'
},
name:
}],
specialist:[{
_id:{
type:ObjectId,
ref:'User'
},
full_name:String
}]
})
企业提供服务,服务由专家执行,每次企业添加专家时,用户都会在具有特定角色的数据中开展新业务。
您的想法是,在创建业务时,您在“搜索”中创建文档,当业务创建服务时将其分配给专家,它们将添加到“搜索”集合中。在本文档的每个修改中,文本字段将使用业务名称,服务和专家的串联进行更新,这样他们就可以使用单个集合来搜索文本索引。您正在寻找的任何领域都将带来业务。
谁在模型和搜索公共集合的解决方案中都有建议。
答案 0 :(得分:0)
查看版本3.2中的$lookup (aggregation)新内容。
在同一个中执行左外部联接到未整数的集合 数据库从“已加入”集合中过滤文档 处理。 $ lookup阶段在字段之间进行相等匹配 从输入文件中提取一个字段的文件 “加入”系列。
顺便说一句,文档数据库的优点是它消除了大量的连接。 相关信息存储在一起,以便通过MongoDB查询语言进行快速查询访问。此数据模型使您能够轻松地表示层次关系,存储数组和其他更复杂的结构。因此,我建议您在设计MongoDB架构时,尽可能将其放在单个文档中。
您可以从MongoDB relationships: embed or reference?查看更多详情。
希望这有帮助。