2014-09-19 88 views
5

我決定將我的數據庫從MySQL遷移到Mongo,因爲大部分時間,我的數據沒有結構化。它讓我在傳統SQL中過於複雜的可能性。如何在NoSQL中查詢關係?

我目前面臨的一個問題是如何在NoSQL中實現傳統的SQL關係模型。我多次讀過NoSQL不是爲了處理關係而設計的。我是否需要將它們作爲數組添加到具有關係的文檔中?

這是一個讓我卡住的情況。在SQL中,我有一個單獨的oauth訪問令牌表,它具有user_id,client_id,access_token,作爲其屬性過期。這是用戶和access_token之間的1-N關係。我會如何在NoSQL中做到這一點?通過添加一個數組字段oauth_tokens?如果我這樣做,我該如何搜索數組中的令牌?如何查詢

search for a document where the _id is $user_id and there is an element 
with $token in the access_tokens array? 
+0

您可以在mongodb中使用map-reduce概念與兩個不同的集合形成關係。 – 2014-09-19 09:18:24

+0

@KumarKailash可能你不能。 MongoDB一次只能處理**一個**集合,並且「故意」這樣做是出於某種原因。這個問題需要提供一個具體的點和示例問題來解決,或者它基本上「太寬泛」。所以如果作者想要一個真正的答案,那麼建議實際描述這個問題而不是要求一般化。 – 2014-09-19 09:59:59

+0

在我問這個問題之前,我對mongo中的「關係」知之甚少;在Google搜索並嘗試和測試之後,我有一點點的知識。對於那個很抱歉。我現在得到了我所需要的東西,但我很確定在最近的將來我會問這個類似的問題,那時我會非常具體。 – Gasim 2014-09-19 23:08:23

回答

2

你至少有2個選擇這裏:

  1. 可以oauth_tokens存儲在單獨收集(就像你在MySQL曾在其他表),並添加到組oauth_token場像user_id包含來自用戶集合的當前用戶的_id值。爲指定用戶查找令牌只需在oauth_tokens集合中搜索具有給定user_id的文檔即可。請記住,這種關係不是由Mongo以任何方式「支持」 - 數據庫不會幫助您保持字段user_id的值正確。

實施例:

db.tokens.insert({ client_id : "1", user_id : "20", access_token : "1234567890", expires : new Date(2014-12-31)}) 

查詢:

db.tokens.find({user_id:"20"}) 
  • 就像你寫道:可以嵌入用戶文檔中的現有的令牌標記和查詢。查看文檔以查看如何查詢嵌入式文檔:link
  • +0

    也許可以證明某種方法可以做任何一種方法,而不是簡單的段落,或者其他方面只是一個鏈接,也許呢? – 2014-09-19 10:02:14

    +0

    對不起,提出舊的話題。所以。如果我想用特定標記找到用戶,我可以這樣做'db.tokens.find({access_token:「1234567890」})'? – Kurotsuki 2017-10-31 08:27:08

    +0

    @Kurotsuki是的,這是查詢使用。 – 2017-10-31 16:02:05