在几个引用的集合中使用mongo查找文本

时间:2017-02-11 11:49:29

标签: javascript node.js mongodb express

由于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
 }]
})

企业提供服务,服务由专家执行,每次企业添加专家时,用户都会在具有特定角色的数据中开展新业务。

您的想法是,在创建业务时,您在“搜索”中创建文档,当业务创建服务时将其分配给专家,它们将添加到“搜索”集合中。在本文档的每个修改中,文本字段将使用业务名称,服务和专家的串联进行更新,这样他们就可以使用单个集合来搜索文本索引。您正在寻找的任何领域都将带来业务。

谁在模型和搜索公共集合的解决方案中都有建议。

1 个答案:

答案 0 :(得分:0)

查看版本3.2中的$lookup (aggregation)新内容。

  

在同一个中执行左外部联接到未整数的集合   数据库从“已加入”集合中过滤文档   处理。 $ lookup阶段在字段之间进行相等匹配   从输入文件中提取一个字段的文件   “加入”系列。

顺便说一句,文档数据库的优点是它消除了大量的连接。 相关信息存储在一起,以便通过MongoDB查询语言进行快速查询访问。此数据模型使您能够轻松地表示层次关系,存储数组和其他更复杂的结构。因此,我建议您在设计MongoDB架构时,尽可能将其放在单个文档中。

您可以从MongoDB relationships: embed or reference?查看更多详情。

希望这有帮助。