我是Mongo数据库的新手,来自T-SQL背景,我发现很难理解联接在Mongo中是如何工作的。
我有一个非常简单的案例,我有一个"用户表..错误..收藏"和"用户审核收集" ..
我的用户集看起来像这样。
{
"_id": LUUID("d991e92a-766c-054e-9ad8-1c902acc6efc"),
"System": {
"VisitCount": 1
},
"UserData": {
"Uid": "46831",
"UserName": "abc.",
"FirstName": "abv",
"LastName": "test",
"EmailId": "abc@gmail.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 :(得分:0)
Mongo是一个简单的对象存储数据库,并不提供很多关联操作,如连接。通常,您必须以编程方式执行多个查询并使用应用程序代码和逻辑处理数据。
在Mongo 3.2中,他们向聚合管道引入了查找操作,幸运的是,它可以满足您的需求。你可以使用这样的东西(使用mongo shell javascript语法作为例子)
db.user.aggregate([{
$lookup: {
from: "audit",
localField: "_id",
foreignField: "UserId",
as: "VisitedPages"
}
}]);
如果您使用的是最新版本的mongo,则可以使用此方法,否则您需要对应用程序进行多次查询。