Заказ в MongoDB запрос с PHP - PullRequest
0 голосов
/ 02 апреля 2012

Как вы заказываете в запросах MongoDB при использовании php?

$regexObj = new MongoRegex('/'.$str.'/i');

$search = array('title'  => $regexObj);

$cursor = $this->collection->find($search);

У меня есть одно поле в виде таблицы в MongoDB со строками:

//first
[title] => Great Musuem
[table] => arts

//second    
[title] => Musuem
[table] => people

//third     
[title] => Garden
[table] => arts

//4th   
[title] => Garden
[table] => music

etc ...

Как мне отсортировать в соответствии с вышеизложеннымиспользовать таблицу для того, чтобы люди сначала приходили, а потом искусство, а потом музыка?

Например:

[title] => Musuem
[table] => people

[title] => Great Musuem
[table] => arts

[title] => Garden
[table] => arts

[title] => Garden
[table] => music

1 Ответ

1 голос
/ 02 апреля 2012

Вам нужно будет выполнить сортировку на стороне клиента, так как 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 );
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...