Может ли запрос mongo, использующий предложение $in, возвращать результаты в том же порядке, что и в списке $ in?

#mongodb

#mongodb

Вопрос:

Я использую предложение $ in в запросе mongodb. Однако я хочу, чтобы мои результаты были упорядочены точно так же, как мой список ввода, используемый в предложении $ in.

Результаты, которые я получаю обратно, находятся в том порядке, в котором были вставлены объекты.

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

Ответ №1:

MongoDB не выполняет вставку в каком-либо определенном порядке. Однако вы можете отсортировать свои результаты.

Смотрите:

http://www.mongodb.org/display/DOCS/Advanced Queries#AdvancedQueries-$in

 db.updates.ensureIndex( { ts : 1 } ); // ts == timestamp
var myFriends = myUserObject.friends; // let's assume this gives us an array of DBRef's of my friends
var latestUpdatesForMe = db.updates.find( { user : { $in : myFriends } } ).sort( { ts : -1 } ).limit(10);
  

Комментарии:

1. Спасибо, Эван. Однако в моем конкретном случае порядок списка запроса $ in определяется извне. Итак, я действительно хочу, чтобы мои результаты были отсортированы в том же произвольном порядке, что и во входном списке. Я пытаюсь извлечь объекты на основе их идентификаторов после того, как список идентификаторов отсортирован в другом месте.

2. Возможно, вы просто захотите сделать это постфактум. Я обнаружил, что любую сложную сортировку лучше выполнять на веб-уровне, поскольку это дешевле, чем делать это на уровне базы данных.

3. Спасибо, Эван. Именно так я планирую сделать это сейчас. Большое спасибо за вашу помощь.