mongo 聯(lián)表查詢方法

這里只對同庫聯(lián)表查詢做介紹乒躺,跨庫聯(lián)表查詢可能在之后也會介紹(因為公司架構(gòu)變動扬霜,之后可能會聯(lián)表查詢)
我用到的聯(lián)表查詢有兩種抹锄,一種是mongoose的populate,一種是$lookup

populate

populate是使用外鍵關(guān)聯(lián)子表
例如現(xiàn)在有一張訂單表結(jié)構(gòu)(動態(tài)外鍵):

var orderSchema = new mongoose.Schema({
    uid: { type: String, required: true },  // 用戶id
    amount: { type: Number, required: true },
    oType: { type: Number, required: true }, // 訂單類型
    status: { type: Number, required: true }, // 訂單的狀態(tài):1完成  2未完成 3失效
})

用戶表

var userSchema = new mongoose.Schema({
      phone: String,
      status: String,
      createdAt: Date,
      updatedAt: Date
})

現(xiàn)在我想根據(jù)查詢order表雌续,并返回對應(yīng)用戶phone字段

order.find().populate({path: 'uid', model: User, select: '_id real_name phone bankcard'}).exec(function(err, order) {
    // order: {
    //   uid: {
    //     phone: '15626202254',
    //     status: "expand",
    //     createdAt: Date,
    //     updatedAt: Date
    //   },
    //   amount: 5000,
    //   oType: 2, // 訂單類型
    //   status: 1, // 訂單的狀態(tài):1完成  2未完成 3失效
    // }
});

這里order表的uid指向了user表的_id字段,當(dāng)然也可以在新建表的時候定義外鍵胯杭,這里就不細說了

$lookup

lookup就是使用aggregate的$lookup屬性驯杜,直接上官網(wǎng)例子非常好懂
orders表

{ "_id" : 1, "item" : "abc", "price" : 12, "quantity" : 2 }
{ "_id" : 2, "item" : "jkl", "price" : 20, "quantity" : 1 }
{ "_id" : 3  }

inventory表

{ "_id" : 1, "sku" : "abc", description: "product 1", "instock" : 120 }
{ "_id" : 2, "sku" : "def", description: "product 2", "instock" : 80 }
{ "_id" : 3, "sku" : "ijk", description: "product 3", "instock" : 60 }
{ "_id" : 4, "sku" : "jkl", description: "product 4", "instock" : 70 }
{ "_id" : 5, "sku": null, description: "Incomplete" }
{ "_id" : 6 }
db.orders.aggregate([
    {
      $lookup:
        {
          from: "inventory",
          localField: "item",
          foreignField: "sku",
          as: "inventory_docs"
        }
   }
])

就是使用order的item字段作為inventory表的查詢條件{sku: item},并賦值給inventory_docs字段做个,但值得注意的是兩個字段的類型必須一樣(3.5以上貌似可以轉(zhuǎn)鸽心,沒試過)

參考文章
Mongoose中的關(guān)聯(lián)表查詢 && 聚合查詢
在mongoose中填充外鍵

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市居暖,隨后出現(xiàn)的幾起案子顽频,更是在濱河造成了極大的恐慌,老刑警劉巖膝但,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件冲九,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機莺奸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門丑孩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人灭贷,你說我怎么就攤上這事温学。” “怎么了甚疟?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵仗岖,是天一觀的道長。 經(jīng)常有香客問我览妖,道長轧拄,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任讽膏,我火速辦了婚禮檩电,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘府树。我一直安慰自己俐末,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布奄侠。 她就那樣靜靜地躺著卓箫,像睡著了一般。 火紅的嫁衣襯著肌膚如雪垄潮。 梳的紋絲不亂的頭發(fā)上烹卒,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機與錄音魂挂,去河邊找鬼甫题。 笑死,一個胖子當(dāng)著我的面吹牛涂召,可吹牛的內(nèi)容都是我干的坠非。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼果正,長吁一口氣:“原來是場噩夢啊……” “哼炎码!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起秋泳,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤潦闲,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后迫皱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體歉闰,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡辖众,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了和敬。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片凹炸。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖昼弟,靈堂內(nèi)的尸體忽然破棺而出啤它,到底是詐尸還是另有隱情,我是刑警寧澤舱痘,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布变骡,位于F島的核電站,受9級特大地震影響芭逝,放射性物質(zhì)發(fā)生泄漏塌碌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一旬盯、第九天 我趴在偏房一處隱蔽的房頂上張望誊爹。 院中可真熱鬧,春花似錦瓢捉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至迂卢,卻和暖如春某弦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背而克。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工靶壮, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人员萍。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓腾降,卻偏偏與公主長得像,于是被迫代替她去往敵國和親碎绎。 傳聞我的和親對象是個殘疾皇子螃壤,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)載,覺得這篇寫 SQLAlchemy Core筋帖,寫得非常不錯奸晴。不過后續(xù)他沒寫SQLAlchemy ORM... ...
    非夢nj閱讀 5,402評論 1 14
  • 原文:https://my.oschina.net/liuyuantao/blog/751438 查詢集API 參...
    陽光小鎮(zhèn)少爺閱讀 3,822評論 0 8
  • SQL語言基礎(chǔ) 本章,我們將會重點探討SQL語言基礎(chǔ)日麸,學(xué)習(xí)用SQL進行數(shù)據(jù)庫的基本數(shù)據(jù)查詢操作寄啼。另外請注意本章的S...
    厲鉚兄閱讀 5,320評論 2 46
  • 秋, 微霾, 暖日墩划。 喜歡陽光涕刚, 喜歡陽光肆無忌憚曬在身上的感覺。 甩去長衫走诞, 露出短袖副女, 讓微風(fēng)拂面, 讓陽關(guān)直...
    老麥Michael閱讀 254評論 0 1
  • 該隱已經(jīng)老了,從前的很多事情他都想不起來了塞绿,但是他始終記得亞伯的血崩濺到他臉上的溫度沟涨,他也記得亞伯的血在地上漬出的...
    zheung閱讀 502評論 3 2