2014-11-26 2 views
1

У меня есть коллекция адресов, я бы хотел отфильтровать коллекцию, чтобы сохранить 10 ближайших адресов, а затем я хотел бы сортировать их от более раннего до ближайшего.Метеоритная коллекция найти сортировку после фильтрации

Можно ли достичь этого в рамках одного запроса на поиск в метеор?

Следующая дает мне 10 ближайших адресов:

Addresses.find({}, {sort:{distance:1}, limit:10});

, но они упорядочены по мере увеличения расстояния, очевидно, если я установить distance:-1 они будут приходить по убыванию, но я также получит только 10 дальних адресов ...

ответ

0

Если вы введете fetch в результате вашего поиска и reverse, он должен работать.

Addresses.find({}, {sort:{distance:1}, limit:10}).fetch().reverse()

Единственный недостаток заключается в том, что теперь это массив, а не курсор больше

+0

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

1

Вам нужны рамки агрегации:

db.collection.aggregate(
    { $sort: { distance: 1 } }, 
    { $limit: 10 }, 
    { $sort: { distance: -1 } } 
) 

Надеюсь, что запрос не требует пояснений.

Если вы не можете запустить aggregation или собственный запрос mongo в MeteorJS, то вам, вероятно, придется программно отменить результаты, полученные вами из запроса БД.

+0

Ваш ответ является правильным в контексте MongoDB, но сейчас 'findAndModify, агрегатные функции, и карта/уменьшить Арен» t supported.' [как в документации] (http://docs.meteor.com/#/full/mongo_collection) –

+0

Отредактировано для вашего прочтения. – myusuf

Смежные вопросы