2016-06-20 74 views
0

我对Mongo db很新,来自T-SQL背景,我发现很难理解在Mongo中如何工作。Mongo DB加入收藏

我有一个非常简单的情况下,我有一个“用户表.. ERR ..类别”和“用户审核集合” ..

我的用户采集看起来是这样的。

{ 
    "_id": LUUID("d991e92a-766c-054e-9ad8-1c902acc6efc"), 
    "System": { 
    "VisitCount": 1 
    }, 
    "UserData": { 
    "Uid": "46831", 
    "UserName": "abc.", 
    "FirstName": "abv", 
    "LastName": "test", 
    "EmailId": "[email protected].com", 
    "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中,他们将查找操作引入到聚合管道中,幸运的是它可以做你正在寻找的东西。您可以使用这样的事情(使用蒙戈外壳JavaScript语法为例)

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

如果您正在使用蒙戈的最后一个版本,你可以用这个方法打,否则你就需要去与多个查询您的应用程序。

看看在documentation

+0

感谢安德烈..我是不约而同地检查相同的文档,我跑了完全相同的查询..我找回结果..但他们都没有超过50的是,限制? –

+0

抱歉花了那么久。我已经在本地尝试了您的示例数据,并且插入了67条审计记录,并使用上面发布的聚合查询获得了所有这些记录。我没有意识到任何限制,特别是像50这样的低数字。但是当你将这些大文件加入到一起时,你可能会小心,你会得到一些内存和性能问题。您始终可以限制聚合管道返回的字段。 – andre

+0

谢谢。我意识到这是GUI的限制.. roboMongo只返回了50条记录。我能够从Mongobooster和Slamdata获得记录.. –