MongoDb порядок, чтобы быть вычисляемым значением - PullRequest
2 голосов
/ 29 апреля 2011

Что я хотел бы сделать с MongoDB, так это отсортировать мою коллекцию «твитов» по ​​целочисленному полю «точки», но я хочу убрать количество секунд из числа точек, учитывая разницу между временем и время, когда твит был создан. Таким образом, порядок (точки - разница во времени).

Следовательно, это зависит от времени выполнения запроса. Старые твиты будут иметь более низкие баллы.

Может ли кто-нибудь показать мне пример этого в MongoDB (в PHP)?

Ответы [ 4 ]

2 голосов
/ 01 мая 2011

MongoDB не function в команде sort().

Фактически, выполнение простых объектов поиска, где object.a > object.b требует использования неиндексированного $ where условия .

Чтобы обойти это прямо сейчас, нужно вычислить это поле и затем отсортировать его.

Итак, в вашем случае у вас будет новое поле со значением (points-time).).Обратите внимание, что если вы планируете сортировать эти данные, вы, вероятно, захотите, чтобы это поле было проиндексировано.Попытка сортировки большого количества неиндексированных полей может быть очень медленной.

1 голос
/ 30 апреля 2011

AFAIK, sort() не берет function, поэтому с этим мало что можно поделать.Возможно, вы захотите сделать упорядочение по разнице во времени на уровне приложения.

0 голосов
/ 07 января 2014

Этот пост может помочь.

MongoDB получает все поля + сортировка по значению, вычисленному из нескольких полей

Основная идея состоит в том, что он создает новый объект с новым свойством, вычисленным из старого объекта. Затем он сортирует новые объекты и возвращает результат.

0 голосов
/ 09 мая 2011
$m = new Mongo(); // connect
$collection = 'collection_name';
$db = $m->selectDB('mongodb_name');
$cursor = $db->$collection->find();
$cursor->sort(array('day' => -1));
$items = iterator_to_array($cursor);
...