如何使用 aggregate & $lookup 合并 2 个集合与 mongodb 中的特定字段
How to merge 2 collections with specific fields in mongodb, with aggregate & $lookup
我在使用聚合和 $lookup 时遇到问题。因此,感谢您的及时帮助。
比方说,我有这 2 个集合,在同一个 mongoDB:
// collection1 (2 records, in this example):
{
name: 'name1',
city: 'city1'
}
{
name: 'name2’,
city: 'city2’
}
// collection2 (3 records, in this example):
{
name: 'name1',
education: ‘college’,
occupation: ’engineer’,
address: 'address1'
}
{
name: 'name2’,
education: ‘highschool’,
occupation: ’manager’,
address: 'address2'
}
{
name: 'name3’,
education: ‘highschool’,
occupation: ’manager’,
address: 'address3'
}
我想要一个最终的集合,final_collection,像这样返回(名称字段用作索引):
{
name: 'name1',
city: 'city1'
education: ‘college’,
occupation: ’engineer’
}
{
name: 'name2’,
city: 'city2’
education: ‘highschool’,
occupation: ’manager’
}
本质上,仅将 'education' 和 'occupation' 字段添加到 collection1 中,用于匹配的记录(name1 和 name2)。
你能帮忙吗?非常感谢!
你可以 $lookup
加入两个合集
$lookup
加入两个集合
$addFields
添加新字段
$arrayElementAt
获取连接后的第一个元素。 $ifNull
防止数组中没有元素时出现 NPE
这是代码
db.collection2.aggregate([
{
"$lookup": {
"from": "collection1",
"localField": "name",
"foreignField": "name",
"as": "join"
}
},
{
$addFields: {
join: {
$ifNull: [
{ "$arrayElemAt": [ "$join", 0 ] },
[]
]
}
}
},
{
"$addFields": {
"city": "$join.city",
join: "$$REMOVE",
address: "$$REMOVE"
}
}
])
我在使用聚合和 $lookup 时遇到问题。因此,感谢您的及时帮助。
比方说,我有这 2 个集合,在同一个 mongoDB:
// collection1 (2 records, in this example):
{
name: 'name1',
city: 'city1'
}
{
name: 'name2’,
city: 'city2’
}
// collection2 (3 records, in this example):
{
name: 'name1',
education: ‘college’,
occupation: ’engineer’,
address: 'address1'
}
{
name: 'name2’,
education: ‘highschool’,
occupation: ’manager’,
address: 'address2'
}
{
name: 'name3’,
education: ‘highschool’,
occupation: ’manager’,
address: 'address3'
}
我想要一个最终的集合,final_collection,像这样返回(名称字段用作索引):
{
name: 'name1',
city: 'city1'
education: ‘college’,
occupation: ’engineer’
}
{
name: 'name2’,
city: 'city2’
education: ‘highschool’,
occupation: ’manager’
}
本质上,仅将 'education' 和 'occupation' 字段添加到 collection1 中,用于匹配的记录(name1 和 name2)。
你能帮忙吗?非常感谢!
你可以 $lookup
加入两个合集
$lookup
加入两个集合$addFields
添加新字段$arrayElementAt
获取连接后的第一个元素。$ifNull
防止数组中没有元素时出现 NPE
这是代码
db.collection2.aggregate([
{
"$lookup": {
"from": "collection1",
"localField": "name",
"foreignField": "name",
"as": "join"
}
},
{
$addFields: {
join: {
$ifNull: [
{ "$arrayElemAt": [ "$join", 0 ] },
[]
]
}
}
},
{
"$addFields": {
"city": "$join.city",
join: "$$REMOVE",
address: "$$REMOVE"
}
}
])