如何在MongoDB中执行SQL Join等效项?
例如,假设你有两个集合(用户和评论),我想用pid = 444以及每个集合的用户信息来提取所有评论.
comments
{ uid:12345, pid:444, comment="blah" }
{ uid:12345, pid:888, comment="asdf" }
{ uid:99999, pid:444, comment="qwer" }
users
{ uid:12345, name:"john" }
{ uid:99999, name:"mia" }
Run Code Online (Sandbox Code Playgroud)
有没有办法用一个字段拉出所有评论(例如......查找({pid:444}))以及与每个评论相关的用户信息?
目前,我首先得到符合我标准的评论,然后找出该结果集中的所有uid,获取用户对象,并将它们与评论的结果合并.好像我做错了.
我想使用聚合$ lookup在MongoDB中加入两个以上的集合.有可能加入吗?给我一些例子.
这里我有三个集合:
"用户"
{
"_id" : ObjectId("5684f3c454b1fd6926c324fd"),
"email" : "admin@gmail.com",
"userId" : "AD",
"userName" : "admin"
}
Run Code Online (Sandbox Code Playgroud)
"用户信息"
{
"_id" : ObjectId("56d82612b63f1c31cf906003"),
"userId" : "AD",
"phone" : "0000000000"
}
Run Code Online (Sandbox Code Playgroud)
"UserRole的"
{
"_id" : ObjectId("56d82612b63f1c31cf906003"),
"userId" : "AD",
"role" : "admin"
}
Run Code Online (Sandbox Code Playgroud) 我正在将 SQL 查询重写为 mongoDB。有人可以帮助我们如何使用多个连接键和条件连接两个集合,如下面的 SQL 查询所示。
SELECT S.* FROM LeftTable S
LEFT JOIN RightTable R ON S.ID =R.ID AND S.MID =R.MID WHERE R.TIM >0 AND S.MOB IS NOT NULL
Run Code Online (Sandbox Code Playgroud)
我有下面的代码,它使用单连接键条件。如果有人可以帮助使用多个连接键和 where 子句来完成查询,我将很高兴。
db.dim.aggregate([{$lookup:{from:"dimFactsVer11",localField:"Sub", foreignField:"Type", as:"EmbedUp"}}])
Run Code Online (Sandbox Code Playgroud) 我想使用两个数组的 ID 将数据合并到一个集合中。
一个例子如下所示。
{
"_id": ObjectId ("5976fd2eb0adec0a32fa9831"),
"People": [
{
"_id": 1, <--- ID
"Name": "jane"
},
{
"_id": 2, <--- ID
"Name": "Mark"
}
],
"Contents": [
{
"userID": 2, <--- People ID
"Text": "111"
},
{
"userID": 1, <--- People ID
"Text": "Hi"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我想制作上述文件如下。
{
"_id": ObjectId ("5976fd2eb0adec0a32fa9831"),
"People": [
{
"_id": 1,
"Name" : "Jane"
},
{
"_id": 2,
"Name": "Mark"
}
],
"Contents": [
{
"userID": 2,
"Name": "Mark", <-- Adding
"Text": …Run Code Online (Sandbox Code Playgroud) 我想使用mongochef在MongoDB中“加入” 3个集合。集合是“订单”,“员工”和“城市”。我尝试使用临时集合,但是它无效。现在,我将var = a用于第一个“ join”。
如果我想显示“ a”,则仅显示20个结果。您有想法或其他解决方案吗?
var a = db.Order.aggregate([
{
$lookup:
{
from: "City",
localField: "City Key",
foreignField: "City Key",
as: "lsg"
}
},
{
$unwind: "$lsg"
},
{
$project:
{
"_id":1,
"Salesperson Key":1,
"City": "$lsg.City"
}
}
])
a;
var b = db.Employee.aggregate([
{
$lookup:
{
from: "a",
localField: "Employee Key",
foreignField: "Salesperson Key",
as: "lsg2"
}
},
{
$unwind: "$lsg2"
},
{
$project:
{
"_id":1,
"Employee":1
}
}
])
Run Code Online (Sandbox Code Playgroud)
预先感谢您的答复。