2016-06-20 4 views
0

私はMongo dbの新機能で、T-SQLの背景から来ています.Mongoでの結合の仕組みを理解するのは少し難しいです。Mongo DB Join collection

私は

私のユーザーのコレクションは次のようになります..「コレクション.. ERR。ユーザー表」と「ユーザー監査コレクション」私は非常に単純なケースを持っています。

{ 
    "_id": LUUID("d991e92a-766c-054e-9ad8-1c902acc6efc"), 
    "System": { 
    "VisitCount": 1 
    }, 
    "UserData": { 
    "Uid": "46831", 
    "UserName": "abc.", 
    "FirstName": "abv", 
    "LastName": "test", 
    "EmailId": "[email protected]", 
    "Region": "Georgia", 
    "Postal": "10000", 
    "Country": "United States", 
    "Phone": "800-000-1734", 
    } 
} 

とユーザー監査表:

{ 
    "_id": LUUID("9561a583-0afe-e844-a090-43ffdab46ed2"), 
    "UserId": LUUID("914ed252-3fc7-d84c-9731-f382e7cf400b"), 
    "StartDateTime": ISODate("2016-05-12T04:07:37.299Z"), 
    "EndDateTime": ISODate("2016-05-12T04:07:42.715Z"), 
    "SaveDateTime": ISODate("2016-05-12T04:28:23.186Z"), 
    "Browser": { 
    "BrowserVersion": "50.0", 
    "BrowserMajorName": "Chrome", 
    "BrowserMinorName": "50.0" 
    }, 
    "Pages": [ 
    { 
     "DateTime": ISODate("2016-05-12T04:07:37.365Z"), 
     "Duration": 5416, 
     "Item": { 
     "_id": LUUID("f293157a-f22d-fe49-a7b0-f66f412408fe"), 
     "Language": "en", 
     "Version": 1 
     }"Url": { 
     "Path": "/" 
     }, 
     "VisitPageIndex": 1 
    }, 
    { 
     "DateTime": ISODate("2016-05-12T04:07:42.781Z"), 
     "Duration": 0, 
     "Item": { 
     "Version": 0 
     }, 
     "SitecoreDevice": { 
     "_id": LUUID("df7f5dfe-c089-994d-9aa3-b5fbd009c9f3"), 
     "Name": "Default" 
     }, 
     "MvTest": { 
     "ValueAtExposure": 0 
     }, 
     "Url": { 
     "Path": "/Sample Page1" 
     }, 
     "VisitPageIndex": 2 
    } 
    ] 
} 

私は、各行がすべてのユーザーのユーザー情報とユーザーが訪問したページを保持するフラットビューを必要としています。
監査情報は、ユーザーごとにグループ化することも、ユーザーごとに繰り返すこともできます。私の主な考えは、ユーザーの詳細とページの訪問履歴を組み合わせることです。私は左の外側のようなものを探しています

は同等

Select * from usertable, useraudittable 
on usertable.id = userAuditTable.UserId 
group by userID. 

答えて

0

モンゴは、単純なオブジェクト・ストレージ・データベースであると合流するような関係演算の多くを提供していないようなものに参加します。通常、プログラムで複数のクエリを実行し、アプリケーションコードとロジックを使用してデータを処理する必要があります。

Mongo 3.2では、彼らは集計パイプラインにルックアップ操作を導入しました。そして、幸いにもそれはあなたが探しているものをちょっとだけ行います。あなたは、あなたがこのアプローチで遊ぶことができますモンゴの最後のバージョンを使用している場合、それ以外の場合は、あなたのアプリケーションに複数のクエリで行く必要があります

db.user.aggregate([{ 
    $lookup: { 
     from: "audit", 
     localField: "_id", 
     foreignField: "UserId", 
     as: "VisitedPages" 
     }  
}]); 

(例として、モンゴシェルJavaScriptシンタックスを使用して)このようなものを使用することができます。

documentation

+0

おかげでアンドレ..私は偶然に同じ文書をチェックしていたと私は正確に同じクエリを実行しました..私は結果を返す取得しています..しかし、彼らは50であることよりも多くはありませんを見てみましょう限界? –

+0

長いこと残念です。あなたのサンプルデータをローカルで試してみました。私は67個の監査レコードを挿入し、上記の集計クエリを使用してそれらのすべてを取得しました。私は何の制限も認識していません、特に50のような低い数値です。しかし、このような巨大な文書を結合するときには注意が必要かもしれません。アグリゲーションパイプラインによって返されるフィールドは、常に制限できます。 – andre

+0

ありがとうございます。私はこれがGUIの限界であることに気付きました。ロボ・モンゴは50レコードしか返していませんでした。私はMongoboosterとSlamdataからレコードを得ることができました.. –