麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 數(shù)據(jù)庫 > MongoDB > 正文

mongodb做聯(lián)表查詢的方法是什么?

2024-09-07 00:22:25
字體:
供稿:網(wǎng)友
       有些需求會(huì)需要我們對數(shù)據(jù)庫做聯(lián)表查詢操作,在SQL中的連表查詢大家可能比較熟悉,但是不是很了解mongodb數(shù)據(jù)庫的聯(lián)表查詢。對此下面就給大家分享mongodb數(shù)據(jù)庫的聯(lián)表查詢實(shí)現(xiàn)。
 
        注意:這里只對同庫聯(lián)表查詢做介紹,跨庫聯(lián)表查詢可能在之后也會(huì)介紹(因?yàn)楣炯軜?gòu)變動(dòng),之后可能會(huì)聯(lián)表查詢)。我用到的聯(lián)表查詢有兩種,一種是mongoose的populate,一種是$lookup
 
        一、populate
 
        populate是使用外鍵關(guān)聯(lián)子表
        例如現(xiàn)在有一張訂單表結(jié)構(gòu)(動(dòng)態(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)然也可以在新建表的時(shí)候定義外鍵,這里就不細(xì)說了
 
        二、$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字段,但值得注意的是兩個(gè)字段的類型必須一樣(3.5以上貌似可以轉(zhuǎn),沒試過)。



(編輯:武林網(wǎng))

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 久久影院免费观看 | 精品国产一区二区三区四区阿崩 | 亚洲日本韩国在线观看 | 日本a级免费 | 中文字幕在线不卡视频 | www.9191.com| 成人一级毛片 | 少妇一级淫片高潮流水电影 | 精品国产一区二区三区四区阿崩 | 国产毛片网站 | 欧美特级一级毛片 | 美女黄网站免费观看 | 成人羞羞在线观看网站 | 中文字幕欧美一区二区三区 | 亚洲xxx在线观看 | 国产一区二区三区四区五区加勒比 | 欧美一区在线观看视频 | 亚州欧美视频 | 国产免费久久久久 | 欧美一级精品片在线看 | 一区二区三区在线视频观看58 | 亚洲射逼 | 国产手机国产手机在线 | 成人毛片视频免费看 | jizzjizz中国少妇中文 | 一级一级一级毛片 | 日本成人在线播放 | 日日草夜夜操 | 在线中文字幕不卡 | 黄色免费在线电影 | 色柚视频网站ww色 | 91久久国产综合久久91精品网站 | 特黄一级小说 | 日日操夜夜操视频 | 看免费的毛片 | 亚洲一区 国产 | 中国hdxxxx护士爽在线观看 | 久久精品国产清自在天天线 | 亚洲黑人在线观看 | videos高潮 | 看毛片免费|