国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

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

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

2024-09-07 00:22:25
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
       有些需求會(huì)需要我們對(duì)數(shù)據(jù)庫(kù)做聯(lián)表查詢操作,在SQL中的連表查詢大家可能比較熟悉,但是不是很了解mongodb數(shù)據(jù)庫(kù)的聯(lián)表查詢。對(duì)此下面就給大家分享mongodb數(shù)據(jù)庫(kù)的聯(lián)表查詢實(shí)現(xiàn)。
 
        注意:這里只對(duì)同庫(kù)聯(lián)表查詢做介紹,跨庫(kù)聯(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表,并返回對(duì)應(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ā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 宜兰县| 大同县| 宝清县| 兰州市| 北碚区| 兖州市| 中超| 建宁县| 安吉县| 高安市| 西吉县| 平南县| 简阳市| 东丽区| 绍兴市| 铁力市| 英德市| 岑巩县| 松阳县| 龙游县| 根河市| 汝阳县| 永嘉县| 民乐县| 枞阳县| 彭水| 新沂市| 华亭县| 喀什市| 黑河市| 寻乌县| 四子王旗| 商丘市| 宁明县| 武胜县| 芒康县| 邹城市| 宜章县| 巨鹿县| 双城市| 秦皇岛市|