2013-12-04 2 views
-1

Я новичок в mongodb, и я хочу использовать функцию mongo map/reduce в своих php-кодах, связанных с моей базой mongo.Использование mongodb map/reduce in php

У меня есть документ с именем видео с большим количеством элементов, я хочу получить 10 элементов, которые имеют наибольшие значения в определенном поле с именем «fc_total_share».

И, кстати, поскольку у моего документа «видео» действительно очень много элементов, вы думаете, что карта/сокращение - это хороший способ получить определенные предметы, и если бы вы, ребята, не помогли мне найти лучшего путь.

+0

Удивительная. Осталось только написать код. –

+3

Это не относится к карте/сокращению, вы можете просто выполнить сортировку запросов поиска по fc_total_share: db.videos.find(). Sort ({"fc_total_share": -1}). Limit (10); – Madarco

ответ

4

Вы можете сделать это с помощью команды $ db->()

<?php 

// sample event document 
$events->insert(array("user_id" => $id, 
    "type" => $type, 
    "time" => new MongoDate(), 
    "desc" => $description)); 

// construct map and reduce functions 
$map = new MongoCode("function() { emit(this.user_id,1); }"); 
$reduce = new MongoCode("function(k, vals) { ". 
    "var sum = 0;". 
    "for (var i in vals) {". 
     "sum += vals[i];". 
    "}". 
    "return sum; }"); 

$sales = $db->command(array(
    "mapreduce" => "events", 
    "map" => $map, 
    "reduce" => $reduce, 
    "query" => array("type" => "sale"), 
    "out" => array("merge" => "eventCounts"))); 

$users = $db->selectCollection($sales['result'])->find(); 

foreach ($users as $user) { 
    echo "{$user['_id']} had {$user['value']} sale(s).\n"; 
} 

?> 

Просто, чтобы показать пример кода копируется здесь: http://php.net/manual/en/mongodb.command.php