MongoDB (PHP) — MapReduce — соединяет документы в разных коллекциях с одинаковым идентификатором

У меня есть коллекция с именем Запросы с документами, следующими за этим прототипом:

{
"_id": {
"$id": "56295368ef2b8e5458000029"},
"title": "Hardcoded Name",
"requestorId": "dve34gegrgeefdsfewe"}

requestorId из этих документов коррелирует с id (не _id Монго ID объекта) пользователи Коллекция, документы которой следуют этому прототипу:

{
"_id": {
"$id": "86235288ef2gif5458000027"},
"id": "dve34gegrgeefdsfewe",
"name": "John Doe"}

Я должен быть в состоянии запустить find() на Запросы Сбор и получение name связано с requestorId в каждом запросе документ. Я обычно просто делаю очевидное: запустить find() на requestsзатем, просматривая каждый документ, выполните последующий запрос пользователи где id = [requestorId (really "id" in users collection)]НО мне нужно уметь сортировать весь Запросы Коллекция по имени, связанному с каждым requestorIdзатем используйте skip() & limit(), Это должно быть довольно просто, но я не могу понять это … Вот мой код, вдохновленный https://www.noppanit.com/merge-documents-two-collections-together-mongodb/

$m = new MongoClient(); // connect
$db = $m->{"database"};

// construct map and reduce functions
$eventRequest_map = new MongoCode("function() {
emit(this.requestorId, {\"requestorId\" : this.requestorId})
}");
$user_map = new MongoCode("function() {
emit(this.id, {\"name\" : this.name})
}");


$reductionFunction = new MongoCode("function(key, values) {
var result = {
\"requestorId\" : \"\",
\"name\" : \"\"};

return result;
}");

$sales = $db->command(array(
'mapreduce' => "requests",
'map' => $eventRequest_map,
'reduce' => $reductionFunction,
'query' => array(),
'out' => 'joined'));

$sales = $db->command(array(
'mapreduce' => "users",
'map' => $user_map,
'reduce' => $reductionFunction,
'query' => array(),
'out' => 'joined'));


$collection = $db->joined;

$cursor = $collection->find();
$outputJoined = array();
foreach($cursor as $doc){
$outputJoined[] = $doc;
}
echo json_encode($outputJoined);

1

Решение

Задача ещё не решена.

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

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

По вопросам рекламы [email protected]