2017-02-11 40 views
0

由於mongodb不支持連接,並且我需要在各種業務集合,服務和用戶中進行搜索,所以我提出了一個解決方案,但我需要它來驗證和/或改進。在幾個引用的集合中查找含有mongo的文本

方案的流程是這樣的:

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

檢出$lookup (aggregation)版本3.2中的新功能。

執行左外連接到unsharded集合在同一個 數據庫文件過濾從對 處理「加入」集合。 $ lookup階段在來自輸入文檔的字段 與來自 「已加入」集合的文檔的字段之間進行相等匹配。

順便說一句,文檔數據庫的優點是它消除了大量的聯接。 相關信息一起存儲,以便通過MongoDB查詢語言進行快速查詢訪問。該數據模型使您能夠輕鬆地表示層次關係,存儲數組以及其他更復雜的結構。所以我建議,當你設計一個MongoDB模式時,你應該儘可能多地將它放在單個文檔中。

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

希望這會有所幫助。

相關問題