我有两个与公司信息相对应的集合,每个集合都有另一个没有的信息。所以我要做的就是简单地将两个集合合并成一个拥有所有信息的集合。
示例:
Collection_1有类似的记录
{
"_id": {
"$oid": "5f7db2adfa8c217420d32560"
},
"Company": "moby group",
"Country": "Afghanistan",
"Industry": "Media",
"Status": "Done",
"Links": [
"https://mobygroup.com/",
"https://en.wikipedia.org/wiki/Moby_Media_Group",
"https://en.wikipedia.org/wiki/Moby",
"https://www.amazon.com/Moby-Group-Darya/dp/B08BLQDRTZ"
]
}Collection_2有类似的记录
{
"_id": {
"$oid": "5faa792d78a49486fdf4f605"
},
"Company": "moby group",
"domain": "mobygroup.com",
"year founded": 2003,
"industry": "broadcast media",
"size range": "201-500",
"country": "afghanistan",
"linkedin url": "linkedin.com/company/moby-group",
"current employee estimate": 165,
"total employee estimate": 324
}我希望将公司名称上的Collection_1和Collection_2合并到一个集合中,如下所示:
{
"_id": {
"$oid": "..."
},
"Company": "moby group",
"domain": "mobygroup.com",
"year founded": 2003,
"industry": "broadcast media",
"size range": "201-500",
"country": "afghanistan",
"linkedin url": "linkedin.com/company/moby-group",
"current employee estimate": 165,
"total employee estimate": 324,
"Status": "Done",
"Links": [
"https://mobygroup.com/",
"https://en.wikipedia.org/wiki/Moby_Media_Group",
"https://en.wikipedia.org/wiki/Moby",
"https://www.amazon.com/Moby-Group-Darya/dp/B08BLQDRTZ"
]
}换句话说,我希望使用集合2中的所有字段,再加上集合1中的“状态”和“链接”字段。从我的研究中,我发现MongoDB不允许一个人轻松地完成这个任务,而且我发现使用查找和解压聚合的方法是很麻烦的,但是我无法将我的注意力集中在这个流程上。
有人能给我解释一下我是怎么做到的吗?
发布于 2020-11-10 13:51:13
可以使用$lookup合并集合。
您需要一个类似于以下内容的查询:
db.coll2.aggregate([
{
"$lookup": {
"from": "coll1",
"localField": "Company",
"foreignField": "Company",
"as": "joinCollection"
}
},
{
"$addFields": {
"Status": {
"$arrayElemAt": [
"$joinCollection.Status",
0
]
},
"Links": {
"$arrayElemAt": [
"$joinCollection.Links",
0
]
}
}
},
{
"$unset": "joinCollection"
}
])这个查询使用join在两个集合之间执行一个$lookup。它将集合按Company字段合并并存储到一个名为joinCollection的变量中。
然后,查询添加您想要的字段:Status和Links,并删除字段joinColeection,以获得您想要的对象。
这是一个示例
https://stackoverflow.com/questions/64769931
复制相似问题