a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

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

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

2024-09-07 00:22:25
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
       有些需求會(huì)需要我們對(duì)數(shù)據(jù)庫(kù)做聯(lián)表查詢(xún)操作,在SQL中的連表查詢(xún)大家可能比較熟悉,但是不是很了解mongodb數(shù)據(jù)庫(kù)的聯(lián)表查詢(xún)。對(duì)此下面就給大家分享mongodb數(shù)據(jù)庫(kù)的聯(lián)表查詢(xún)實(shí)現(xiàn)。
 
        注意:這里只對(duì)同庫(kù)聯(lián)表查詢(xún)做介紹,跨庫(kù)聯(lián)表查詢(xún)可能在之后也會(huì)介紹(因?yàn)楣炯軜?gòu)變動(dòng),之后可能會(huì)聯(lián)表查詢(xún))。我用到的聯(lián)表查詢(xú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 }, // 用戶(hù)id
 amount: { type: Number, required: true },
 oType: { type: Number, required: true }, // 訂單類(lèi)型
 status: { type: Number, required: true }, // 訂單的狀態(tài):1完成 2未完成 3失效
})
        用戶(hù)表:
 
var userSchema = new mongoose.Schema({
 phone: String,
 status: String,
 createdAt: Date,
 updatedAt: Date
})
        現(xiàn)在我想根據(jù)查詢(xún)order表,并返回對(duì)應(yīng)用戶(hù)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, // 訂單類(lèi)型
 // status: 1, // 訂單的狀態(tài):1完成 2未完成 3失效
 // }
});
        這里order表的uid指向了user表的_id字段,當(dāng)然也可以在新建表的時(shí)候定義外鍵,這里就不細(xì)說(shuō)了
 
        二、$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表的查詢(xún)條件{sku: item},并賦值給inventory_docs字段,但值得注意的是兩個(gè)字段的類(lèi)型必須一樣(3.5以上貌似可以轉(zhuǎn),沒(méi)試過(guò))。



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

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 凹凸日日摸日日碰夜夜爽孕妇 | 国产美女高潮一区二区三区 | 成人网页| 欧美一二区 | 日韩国产欧美 | 国产真实精品久久二三区 | 欧美一级精品片在线看 | 久久99久久精品视频 | 中文字幕亚洲欧美精品一区四区 | 日韩一区二区视频 | 国产高清av在线一区二区三区 | www精品美女久久久tv | 精品成人一区 | 日日骚 | 日韩免费在线 | 国产91在线观看 | 草草在线观看 | 性视频网站免费 | 亚洲人成人一区二区在线观看 | 色综合久久久久久久 | 国产伦精品一区二区三区高清 | 亚洲国产日韩a在线播放性色 | 国产一区二区三区在线 | 亚洲 中文 欧美 日韩 在线观看 | 成人影院网站ww555久久精品 | 欧美一级二级三级视频 | 91亚洲日本aⅴ精品一区二区 | 九九热精品免费 | 男女啪啪免费网站 | 精品久久一区二区 | 99精品电影 | 精品视频 免费 | 久久久网址 | 亚州视频在线 | 视频在线一区二区 | 精品国产乱码久久久久久蜜柚 | 免费av播放 | 夜夜天天操| 蜜桃视频网站在线观看 | 久久久精品免费观看 | 日本xxx性|