mongodb - 如何在 MongoDB 中执行联接(在 SQL 中类似)?
问题描述
假设我们有两个collections
(用户和数据),需要从用户和数据集合中提取每个 user_id 的所有数据。
users
{user_id: 1, username: tom, userage: 27}
{user_id: 2, username: sam, userage: 25}
data
{workexp: 4, skill: testing, user_id: 1}
{workexp: 9, skill: devops, user_id: 2}
请告诉我我们如何在 mongo 中执行此操作。
解决方案
您可以使用运算符加入集合lookup
。
在此处阅读文档: https ://docs.mongodb.com/manual/reference/operator/aggregation/lookup/
例子:
{
$lookup:
{
from: <collection to join>,
localField: <field from the input documents>,
foreignField: <field from the documents of the "from" collection>,
as: <output array field>
}
}
在你的情况是这样的:
db.users.aggregate([
{
$lookup: {
from: "data",
localField: "user_id",
foreignField: "user_id",
as: "user_data"
}
}])
这将返回此 JSON 对象:
{
"_id" : ObjectId("5ba0bace2fd0cdd3eae35df6"),
"user_id" : 1,
"username" : "tom",
"userage" : 27,
"user_data" : [
{
"_id" : ObjectId("5ba0bafe2fd0cdd3eae35e16"),
"workexp" : 4,
"skill" : "testing",
"user_id" : 1
}
]
}
推荐阅读
- powerbi - Powerquery:用2个双引号(“”)替换1个双引号(“)
- c# - 如何统一使用变量从另一个脚本调用函数
- highcharts - Highcharts xAxis 需要三个图表的相同标签
- gremlin - 重复直到至少一个顶点?
- react-native - react-native-google-fit 不返回 Google Fit 步骤
- javascript - 如何使用复选框控制画布上的绘图
- java - 当我在 JavaFX 中的 ArrayList 上添加数据时,为什么会出现空指针异常
- linux - 如何使用类似于 i2cdetect 的东西检测连接在 PMBus 上的传感器?
- forms - 即使在 C++ Builder 中最小化或最大化,如何以相同的顺序设置表单内容?
- pandoc - 从 Pandoc 中的 txt 生成 epub 时的段落缩进