微信小程序多表聯(lián)合查詢的實現(xiàn)詳解
一對一的設計一般不常見,只需要設計到主表中即可,避免增加復雜性。一對多的關(guān)系比較常見,一的一方通常作為主表,多的一方通常作為子表。而多對多一般會拆分成兩個一對多的關(guān)系,這就必須要用中間表進行過渡。
我們本篇介紹的多表查詢,側(cè)重在一對多的關(guān)系,我們先看一下我們實際的表設計
一對多表設計
我們實現(xiàn)的是文章關(guān)注的業(yè)務,通常將文章作為主表,而關(guān)注信息作為子表。表和表之間要進行關(guān)聯(lián),常見的設計思路是子表的外鍵和主表的主鍵進行關(guān)聯(lián)

這里的文章表的主鍵是_id,所謂的主鍵就是可以唯一標識該條數(shù)據(jù),數(shù)據(jù)不允許重復。關(guān)注表的articleid作為關(guān)注表的外鍵,外鍵可以重復,存儲的是主表的主鍵。
SQL中的關(guān)聯(lián)查詢
在sql中可以對表進行關(guān)聯(lián)查詢,我們使用select 語句來進行關(guān)聯(lián),關(guān)聯(lián)的語句為
select * from article a , focus f where a._id = f.articleid
兩個表進行關(guān)聯(lián)之后其實是對表進行了合并,將文章表的字段和關(guān)注表的字段合并成一個表,關(guān)聯(lián)的條件是文章表的數(shù)據(jù)標識和關(guān)注表的articleid做等值連接
低碼中的表關(guān)聯(lián)
低碼中的表設計也遵循數(shù)據(jù)庫的表設計,不同的是,低碼中的外鍵不需要自己單獨設計,可以設置成關(guān)聯(lián)關(guān)系即可,比如文章表的字段

一般我們的數(shù)據(jù)標識就是我們表的主鍵,關(guān)注表可以存儲外鍵

我們這里的articleid的數(shù)據(jù)類型設置成關(guān)聯(lián)關(guān)系其實就是一種外鍵的意思。
自定義連接器中實現(xiàn)表關(guān)聯(lián)查詢
要想在低碼中實現(xiàn)表和表之間的關(guān)聯(lián)查詢,需要使用aggregate聚合的語法,聚合語法也有本表和需要連接的表,官方文檔里使用了lookup進行表關(guān)聯(lián)
lookup({
from: <要連接的集合名>,
localField: <輸入記錄的要進行相等匹配的字段>,
foreignField: <被連接集合的要進行相等匹配的字段>,
as: <輸出的數(shù)組字段名>
})
具體的參數(shù)說明
| 參數(shù)字段 | 說明 |
|---|---|
| from | 要進行連接的另外一個集合的名字 |
| localField | 當前流水線的輸入記錄的字段名,該字段將被用于與 from 指定的集合的 foreignField 進行相等匹配。如果輸入記錄中沒有該字段,則該字段的值在匹配時會被視作 null |
| foreignField | 被連接集合的字段名,該字段會被用于與 localField 進行相等匹配。如果被連接集合的記錄中沒有該字段,該字段的值將在匹配時被視作 null |
| as | 指定連接匹配出的記錄列表要存放的字段名,這個數(shù)組包含的是匹配出的來自 from 集合的記錄。如果輸入記錄中本來就已有該字段,則該字段會被覆寫 |
光看文檔解釋可能還不是特別明白,我們需要具體實踐一下
新建連接器
登錄控制臺,點擊自定義連接器,點擊新建自定義連接器

輸入名稱和標識

點擊添加方法,新增關(guān)聯(lián)查詢的方法

在自定義代碼編輯器里輸入如下代碼
module.exports = async function (params, context) {
const result = await context.database.collection('lcap-data-2cc504BEZ-gz_necsx6t-preview').aggregate()
.match({
openid:params.openid
})
.lookup({
from: 'lcap-data-2cc4oRuu1-wz_hbmrxec-preview',
localField: 'articleid',
foreignField: '_id',
as: 'articles',
})
.end()
// 在這里返回這個方法的結(jié)果,需要與出參定義的結(jié)構(gòu)映射
return result.data;
};
為了讓代碼運行,先需要新建入?yún)?/p>

入?yún)⒔ê弥?,在代碼里對應的match字段,其中左邊是字段標識,右邊可以通過params.openid來獲取到入?yún)?/p>
集合的名稱需要在云開發(fā)cloudbase的數(shù)據(jù)庫里找

這些都準備好了就要對好localField和foreignField,我們這里的localField是關(guān)注表里存儲的文章id,而foreignField是文章表的數(shù)據(jù)標識
入?yún)⒔ê弥笮枰c擊方法測試

測試成功之后就可以點擊出參映射,這樣一個方法就做好了。這里有必要說一下返回的結(jié)果
[
{
"_id": "16db756f62e7386d0cfdef132edd5e8a",
"owner": "1448239235785420802",
"createdAt": 1659320429844,
"createBy": "1448239235785420802",
"wzbs": "111",
"updateBy": "1448239235785420802",
"openid": "1111",
"articleid": "ca780ad562c290d509bd361d555705c3",
"updatedAt": 1659320429844,
"articles": [
{
"_id": "ca780ad562c290d509bd361d555705c3",
"owner": "1448239235785420802",
"createdAt": 1656918229822,
"bt": "最新文章一",
"createBy": "1448239235785420802",
"nr": "<p><span style=\"color:#222222\"><span style=\"font-size:18px\"><span style=\"background-color:#ffffff\">如果你是已經(jīng)落實工作單位的畢業(yè)生,請及時與用人單位簽訂勞動合同,跟進繳納社會保險,確認檔案轉(zhuǎn)遞去向,并在規(guī)定時間內(nèi)辦理戶口遷移、黨團組織關(guān)系接轉(zhuǎn)等手續(xù)。你入職的企業(yè),也可以申請社會保險補貼、吸納就業(yè)補貼以及擴崗補助等政策支持。</span></span></span></p>",
"fbrq": 1656864000000,
"updateBy": "1448239235785420802",
"updatedAt": 1656918229822
}
]
}
]
返回的是一個數(shù)組,數(shù)組里包含一個對象,對象的基本屬性是顯示的關(guān)注表的字段,而articles是具體用戶關(guān)注的文章的集合,在做展示的時候其實是要綁定articles才對
總結(jié)
要想實現(xiàn)多表之間的關(guān)聯(lián)查詢,先需要做數(shù)據(jù)庫設計,然后按照文檔的聚合語法編寫自定義連接器實現(xiàn),具體還需要結(jié)合你自己的業(yè)務才可以。
到此這篇關(guān)于微信小程序多表聯(lián)合查詢的實現(xiàn)詳解的文章就介紹到這了,更多相關(guān)小程序多表聯(lián)合查詢內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
微信小程序?qū)崿F(xiàn)事件傳參與數(shù)據(jù)同步流程詳解
這篇文章主要介紹了微信小程序開發(fā)中實現(xiàn)事件傳參與數(shù)據(jù)同步的詳細流程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧2022-10-10
JavaScript如何調(diào)試有哪些建議和技巧附五款有用的調(diào)試工具
這篇文章給大家介紹javascript如何調(diào)試有哪些建議和技巧,涉及到javascript調(diào)試方法相關(guān)知識,對javascript調(diào)試方法感興趣的朋友可以參考下本篇文章2015-10-10
JavaScript實現(xiàn)復制文本到剪切板功能的方法小結(jié)
這篇文章給大家介紹了三種JavaScript實現(xiàn)復制文本到剪切板的方法,Clipboard API,document.execCommand以及useClipboard這三個接口,文章通過代碼示例給大家介紹的非常詳細,需要的朋友可以參考下2023-11-11
經(jīng)典面試題之JavaScript?for循環(huán)(var?let)
如果你也在面試找工作,那么也一定遇到過這道for循環(huán)打印結(jié)果的題,下面我們來探討下,對經(jīng)典面試題之js?for循環(huán)相關(guān)知識感興趣的朋友跟隨小編一起看看吧2023-10-10

