Mongodb мульти-массив в отдельный массив при поиске

Моя цель состоит в том, чтобы создать внутренний массив в основной массив при поиске идентификатора пользователя как 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}

0

Решение

В основном тот же ответ на ваш последний вопрос, но без $group реконструировать массив и использовать $project вместо этого, чтобы реструктурировать документ из уже нормализованных элементов массива.

$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'
)
)
))
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector