MongoDB多文档聚合求助:单文档整合多文档数据失败
解决MongoDB多文档聚合到单文档的问题
我来帮你搞定这个多集合聚合的问题!你现在有三个集合:doc1存了关联ID,doc2是地址信息,doc3是社交链接信息,目标是把它们合并成一个完整的文档对吧?
实现思路
利用MongoDB的$lookup阶段做跨集合关联,通过doc1里的addressId和socialId分别匹配doc2和doc3的_id,再通过$unwind展开关联得到的数组,最后用$project整理成你需要的单文档结构。
具体聚合查询
db.doc1.aggregate([ // 第一步:关联doc2,获取地址相关信息 { $lookup: { from: "doc2", localField: "addressId", foreignField: "_id", as: "addressInfo" } }, // 第二步:关联doc3,获取社交平台链接信息 { $lookup: { from: "doc3", localField: "socialId", foreignField: "_id", as: "socialInfo" } }, // 展开地址信息数组(每个关联仅返回一条数据,展开后直接提取文档) { $unwind: "$addressInfo" }, // 展开社交信息数组 { $unwind: "$socialInfo" }, // 第三步:整理最终文档结构,去掉冗余字段 { $project: { _id: 0, addressId: 1, socialId: 1, address: "$addressInfo.address", mob: "$addressInfo.mob", fbURLs: "$socialInfo.fbURLs", twitterURLs: "$socialInfo.twitterURLs" } } ])
执行结果
运行上述聚合命令后,你会得到整合后的单文档:
{ "addressId" : ObjectId("5901a5f83541b7d5d3293768"), "socialId" : ObjectId("5901b0f6d318b072ceea44fb"), "address" : "Gurgaon", "mob" : "9876543211", "fbURLs" : "http://www.facebook.com", "twitterURLs" : "http://www.twitter.com" }
内容的提问来源于stack exchange,提问作者Dave1
相关产品推荐
相关产品推荐

