MongoDB查询加入查询

时间:2016-08-24 11:22:23

标签: mongodb mongodb-query


用户将输入输入名称和宽带速度,如下所示 姓名: shankar
速度 10Mbps的
然后我需要显示
名称: Shankar
速度: 10Mbps
使用的数据: 500MB

从下面给出样本mongodb文件结构如何在mongoDB中查询?
父记录是:
{
subscriber_id:001
名称:尚卡尔
total_data_used:1000MB
时间戳:2016年8月1日00:03:00
}
{
subscriber_id:002
姓名:约翰 total_data_used:2000MB
时间戳:2016年8月1日00:10:00
}

详细信息或子记录如下:
{
subscriber_id:001
服务:10Mbps的
时间戳:2016年8月1日00:01:00
total_data_usage:500MB
}


{
subscriber_id:001
服务:10Mbps的
total_data_usage:500MB
时间戳:2016年8月1日00:02:00
}


{
subscriber_id:002
服务:10Mbps的
时间戳:2016年8月1日00:07:00
total_data_usage:1000MB
}


{
subscriber_id:002
服务:10Mbps的
total_data_usage:1000MB
时间戳:2016年8月1日00:08:00
}

任何人都告诉我在mongodb查询中如何检索

的问候,
香卡

1 个答案:

答案 0 :(得分:1)

此查询应该有效。第一个“查找”阶段根据subscriber_id字段将子集合与父集合连接起来。它将父文件集中的所有文档附加到子文档的subscriber_details数组中。

在您的情况下,这将是第一阶段之后的输出。

{ subscriber_id:001, 服务:10Mbps的, 时间戳:2016年8月1日00:01:00, total_data_usage:500MB, subscriber_details:[{ subscriber_id:001, 名称:shankar, total_data_used:1000MB, 时间戳:2016年8月1日00:03:00 }] }

{ subscriber_id:001, 服务:10Mbps的, total_data_usage:500MB, 时间戳:2016年8月1日00:02:00, subscriber_details:[{ subscriber_id:001, 名称:shankar, total_data_used:1000MB, 时间戳:2016年8月1日00:03:00, }] }

在此阶段之后,我使用“匹配”来过滤输入条件,然后使用“项目”阶段以您希望的形式获取输出。

db.child.aggregate([
{
   $lookup:
     {
       "from": "parent",
       "localField": "subscriber_id",
       "foreignField": "subscriber_id",
       "as": "subscriber_details"
     }
}, 
{
   $match:
     {
       "service":"<input_speed>",
       "subscriber_details.name":"<input_name>"
     }
},
{
   $project:
     {
       "_id":0
       "Name":"$subscriber_details.0.name"
       "Speed":"$service"
       "Data Used":"$total_data_usage"
     }
}])