微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MongoDB 跨集合查询

如何解决MongoDB 跨集合查询

假设结构如下:

资产

{
    "_id" : LUUID("d34a3fed"),"name" : "A","records" : [ 
        LUUID("3627f3ac"),LUUID("80e9d125"),LUUID("4d5e8af5"),LUUID("17593a39"),}

记录

{
    "_id" : LUUID("3627f3ac"),"Fields" : [ 
        {
            "Name" : "foo","Value" : "bar",} 
    ],}

我的目标是使用 find() 或aggregate() 来交叉引用上述两个集合。这两个集合共享 LUUID 值。

{"records": "LUUID("3627f3ac")"}

{"_id": "LUUID("3627f3ac")"}

最终检索:

{"Fields.Name": "foo"}

记录集合的名称

解决方法

也许是这样的:

mongos> db.records.find()
{ "_id" : ObjectId("5ff8ccf9e0f1b975b90d7a86"),"fields" : [ { "name" : "foo","value" : "bar" } ] }
{ "_id" : ObjectId("5ff8ccf9e0f1b975b90d7a87"),"fields" : [ { "name" : "foo2","value" : "bar2" } ] }
{ "_id" : ObjectId("5ff8ccf9e0f1b975b90d7a88"),"fields" : [ { "name" : "foo3","value" : "bar3" } ] }
mongos> db.assest.find()
{ "_id" : ObjectId("5ff8cd72e0f1b975b90d7a87"),"name" : "A","records" : [ ObjectId("5ff8ccf9e0f1b975b90d7a86"),ObjectId("5ff8ccf9e0f1b975b90d7a87") ] }
mongos> db.assest.aggregate([   { $lookup:{ from:"records",localField:"records",foreignField:"_id",as:"match"    }  },{$unwind:"$match"},{$unwind:"$match.fields"},{$project:{ "Fields_name":"$match.fields.name",_id:0}}   ])
{ "Fields_name" : "foo" }
{ "Fields_name" : "foo2" }
mongos>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。