Mongodb多数组到搜索上的单个数组

时间:2015-10-15 10:36:32

标签: php mongodb mongodb-query aggregation-framework

我的目标是在搜索userid为1时为主数组创建内部数组 以下是我的数据

{ "_id" : 2,
  "name" : "test1", 
  "data" :[{"_id" : "1","file" : "nic", "userid" : [1,2 ]},
           {"_id" : "2","file" : "nic1","userid" : [1 ]  },
           {"_id" : 3,"file" : "nick2","userid" : [1,2 ]} 
 ]},

{ "_id" : 3,
  "name" : "test2",
  "data" : [{"_id" : "1","file" : "nic","userid" : [1,2 ]  },
            {"_id" : "2","file" : "nic1", "userid" : [3,2 ] } 
  ]}

需要以

出局
{"_id" : 1,"file" : "nic", "userid" : [1,2 ],"main_name" : "test1","main_id" : 2},
{"_id" : 2,"file" : "nic1","userid" : [1 ] ,"main_name" : "test1","main_id" : 2 },
{"_id" : 3,"file" : "nick2","userid" : [1,2 ],"main_name" : "test2","main_id" : 3},
{"_id" : 1,"file" : "nic","userid" : [1,2 ] ,"main_name" : "test2" ,"main_id" : 3}

1 个答案:

答案 0 :(得分:1)

基本上与last question相同的答案,但没有$group来重建数组,而是使用$project来重新构建已经去规范化的数组元素的文档。< / p>

$collection->aggregate(array(
    array( '$match' => array( "data.userid" => 1 )),
    array( '$unwind' => '$data' ),
    array( '$match' => array( 'data.userid' => 1 )),
    array(
        '$project' => array(
            '_id' => '$data._id',
            'nic' => '$data.nic',
            'user_id' => '$data.user_id',
            'main_name' => '$name',
            'main_id' => '$_id'
        )
    )
))