Использование результатов сортировки PHP и MongoDB по значению ключа И? - PullRequest
0 голосов
/ 18 января 2012

В моем случае я использую MongoDB для хранения целого ряда продуктов из 50 стран, запись в БД выглядит примерно так:

{
    _id: xxxxxxxxxxxxxxx,
    country: 'au',
    title: 'Equipment X',
    price: 1000,
},
{
    _id: xxxxxxxxxxxxxxy,
    country: 'us',
    title: 'Equipment Y',
    price: 1000,
},
...
...

Я хотел бы знать, возможно ли вообщезапросить все продукты и отсортировать по стране с au FIRST, затем остальные продукты после этого.Простая сортировка MongoDB, кажется, сортируется только по ключу.Если это возможно, включает ли это карту / уменьшить?

Редактировать: более подробный пример

Документы в коллекции:

{ country:'cn', title:'Equipment A', price:'100'},
{ country:'au', title:'Equipment B', price:'100'},
{ country:'za', title:'Equipment C', price:'100'},
{ country:'us', title:'Equipment D', price:'100'},
{ country:'nz', title:'Equipment E', price:'100'},
{ country:'it', title:'Equipment F', price:'100'},
{ country:'nz', title:'Equipment G', price:'100'},
{ country:'au', title:'Equipment H', price:'100'},

IЯ ищу вид, который вернет продукты из nz , чтобы они были наверху, а затем следуют за всеми другими продуктами, как это:

{ country:'nz', title:'Equipment E', price:'100'},
{ country:'nz', title:'Equipment G', price:'100'},
{ country:'au', title:'Equipment B', price:'100'},
{ country:'au', title:'Equipment H', price:'100'},
{ country:'cn', title:'Equipment A', price:'100'},
{ country:'it', title:'Equipment F', price:'100'},
{ country:'us', title:'Equipment D', price:'100'},
{ country:'za', title:'Equipment C', price:'100'},

Ответы [ 2 ]

2 голосов
/ 18 января 2012

Сортировка по ключу означает сортировку по значениям в ключе. Это то, что вы хотите, я думаю. (Остановил начальную часть, чтобы подключиться к БД и выбрать коллекцию).

$cursor = $collection->find();
$cursor->sort(array('country' => 1))

обновление Так это то, что вы хотите сделать?

$cursor = $collection->find(array('country' => 'nz'));
// process your nz products...

$cursor = $collection->find(array('country' => array( '$neq' => 'nz' )));
// process the rest of your products...

update2 Ну, я думаю, вам, возможно, придется прибегнуть к подобным действиям, если вам действительно нужны эти функции.

// create a new field on the records that don't have it yet
$collection->update(
   array('country' => 'nz', array('first' => array('$exists' => false))), 
   array('$set' => array('first'=>1)), 
   array('multiple' => true));
// ensure index on that field
$collection->ensureIndex(array('first' => 1));
// find everything
$cursor = $collection->find();
// sort on that field
$cursor->sort(array('first':-1));
0 голосов
/ 18 января 2012

Простая сортировка MongoDB, кажется, сортирует только по ключу

Поистине неосведомленная чепуха.

MongoDB может сортировать по нескольким критериям.Простой взгляд на основную документацию по сортировке был бы здесь полезен.

http://www.mongodb.org/display/DOCS/Sorting+and+Natural+Order

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...