На MongoDB, как я могу ограничить запрос, когда мой обратный вызов находится внутри «найти»? - PullRequest
9 голосов
/ 02 апреля 2012

У меня есть этот запрос в MongoDB

db.privateMessages.find( 
    { $or : [ 
       {fromId: userId, toId: socket.userId} , 
       {fromId: socket.userId, toId: userId} ] 
    }, 
    function(err, messages) { pushSvdMsgs(messages); });

Он работает отлично, за исключением того факта, что я получаю 50 результатов.

Я пробовал это:

db.privateMessages.find( { $or : [ {fromId: userId, toId: socket.userId} , {fromId: socket.userId, toId: userId} ] }, function(err, messages) { pushSvdMsgs(messages); }).limit(10);

Но это тоже не помогло, поэтому я попробовал это ниже, что также не помогло ограничить его.

db.privateMessages.find( { $or : [ {fromId: userId, toId: socket.userId} , {fromId: socket.userId, toId: userId} ] }, { $limit : 2 }, function(err, messages) { pushSvdMsgs(messages); });

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

1 Ответ

22 голосов
/ 02 апреля 2012

Вы поняли это почти правильно.Попробуйте это:

db.privateMessages.find( { $or : [ {fromId: userId, toId: socket.userId} , 
                                   {fromId: socket.userId, toId: userId} ] },
                         {}, 
                         { limit : 2 }, 
                         function(err, messages) { pushSvdMsgs(messages); });

Синтаксис find(query, fields, options).Нам нужен этот пустой объект, чтобы драйвер правильно интерпретировал параметры.

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