Ускорить поиск MongoDB () с лучшей сортировкой?(используя мангусты) - PullRequest
3 голосов
/ 15 апреля 2011

Прямо сейчас у меня есть что-то вроде этого ...

Item.find({}, function (docs) {
    for (var i = docs.length-15; i < docs.length; i++){
     client.send(JSON.stringify(docs[i]));
    }                   
});

но кажется, что это очень медленно.Я надеюсь ускорить его, сделав что-то вроде ...

Item.find().sort({_id:-1}).limit(15)...?

Возможно ли это?Это поможет?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 15 апреля 2011

Если вас интересуют только первые (или последние, как в случае сортировки с _id: -1) 15 документов, тогда да, установка ограничения для запроса - очень хорошая идея. Ограничение на стороне клиента, как в первом примере, означает, что база данных отправляет каждый отдельный документ клиенту, а затем клиент игнорирует все, кроме последних 15.

Однако синтаксис Mongoose для определения предела отличается от синтаксиса оболочки Mongo, вот что, я думаю, вы хотите:

Item.find().sort([['_id','descending']]).limit(15).each(function(doc) {
  client.send(JSON.stringify(doc));
});

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

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

Из того, что я могу узнать из фактического исходного кода и тестов , поскольку mongoose 1.0.14 параметр sort () немного изменился и теперь не используетсяпринять массив.Более того, вам, кажется, нужно снова вызвать find () для фактического объекта Query, который возвращается при вызове find (плюс наблюдение за вашим объектом err).Итак: -

  Item.find().sort('_id','descending').limit(15).find(function(err, doc) {
    client.send(JSON.stringify(doc));
  });

Надеюсь, может сделать то, что вам нужно.

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