Вам нужно будет выполнить сортировку на стороне клиента, так как MongoDB не имеет функций сортировки по нелинейному порядку.Простой usort () в PHP сделает это за вас:
<?php
function sortSpecial($a, $b)
{
$orders = array( 'people' => 1, 'arts' => 2, 'music' => 3 );
if ($orders[$a['table']] > $orders[$b['table']]) {
return 1;
}
if ($orders[$a['table']] < $orders[$b['table']]) {
return -1;
}
return strcmp($a['title'], $b['title']);
}
// your results, just for this example:
$results = array(
array('title' => 'Great Museum', 'table' => 'arts'),
array('title' => 'Museum', 'table' => 'people'),
array('title' => 'Garden', 'table' => 'arts'),
array('title' => 'gaarden', 'table' => 'music'),
);
// sort and display, this also sorts titles in the correct alphabetical order
usort( $results, 'sortSpecial' );
var_dump( $results );
?>