亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用$ lookup運算符的多個聯接條件

使用$ lookup運算符的多個聯接條件

HUH函數 2019-09-24 16:50:53
這是我的收藏:collection1:{    user1: 1,    user2: 2,    percent: 0.56}collection2:{    user1: 1,    user2: 2,    percent: 0.3}我想通過“ user1”和“ user2”加入兩個集合。結果如下:{    user1: 1,    user2: 2,    percent1: 0.56,    percent2: 0.3}如何編寫管道?
查看完整描述

3 回答

?
紅顏莎娜

TA貢獻1842條經驗 獲得超13個贊

如果您想對數據建模,并且在決定這樣做之前來這里檢查mongodb是否可以對多個字段執行聯接,請繼續閱讀。


盡管MongoDB可以執行聯接,但是您也可以根據應用程序訪問模式自由地對數據建模。如果數據與問題中顯示的一樣簡單,我們可以簡單地維護一個如下所示的單個集合:


{

    user1: 1,

    user2: 2,

    percent1: 0.56,

    percent2: 0.3

}

現在,您可以對本集合執行所有操作,而這些操作本來可以加入的。我們為什么要避免加入?由于分片集合(docs)不支持它們,這將阻止您在需要時進行橫向擴展。規范化數據(具有單獨的表/集合)在SQL中效果很好,但是在Mongo中,避免聯接可以帶來很多好處,而在大多數情況下不會產生任何后果。僅當您別無選擇時,才在MongoDB中使用規范化。從文檔:


通常,使用規范化的數據模型:


嵌入時將導致數據重復,但無法提供足夠的讀取性能優勢,無法勝過重復的影響。

代表更復雜的多對多關系。

為大型分層數據集建模。

檢查此處以了解有關嵌入的更多信息以及為什么要選擇它而不是標準化。


查看完整回答
反對 回復 2019-09-24
?
呼如林

TA貢獻1798條經驗 獲得超3個贊

您可以使用$ match和$ project管道進行多個字段匹配。(請參閱此處的詳細答案-mongoDB在多個字段上聯接)


db.collection1.aggregate([

                    {"$lookup": {

                    "from": "collection2",

                    "localField": "user1",

                    "foreignField": "user1",

                    "as": "c2"

                    }},

                    {"$unwind": "$c2"},


                    {"$project": {

                    "user2Eq": {"$eq": ["$user2", "$c2.user2"]},

                    "user1": 1, "user2": 1, 

                    "percent1": "$percent", "percent2": "$c2.percent"

                    }},


                    {"$match": {

                    {"user2Eq": {"$eq": True}}

                    }},


                    {"$project": {

                    "user2Eq": 0

                    }}


                    ])


查看完整回答
反對 回復 2019-09-24
  • 3 回答
  • 0 關注
  • 1528 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號