2012-04-02 12 views
9

que tienen esta consulta en MongoDBEn MongoDB ¿cómo puedo limitar la consulta, cuando mi devolución de llamada está dentro de "buscar"?

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

Funciona perfectamente, excepto por el hecho de que tengo 50 resultados.

He intentado esto:

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

Pero eso no ayuda tampoco, así que este tratado por debajo del cual tampoco ayudar a limitar la misma.

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

¿Cómo puedo limitar el número de resultados de esta consulta, y todavía llamar a la devolución de llamada de la misma manera que tengo?

+0

Entonces, ¿está obteniendo más de 50 documentos y solo quiere 50? Casi –

+0

@SergioTulentsev, rápidamente vi un código con el que trabajó muy bien, era la siguiente: db.privateMessages.find ($ {o: [{fromId: ID de usuario, toid: socket.userId}, { fromId: socket.userId, toId: userId}]}, {}, {limit: 10}, función (err, messages) {pushSvdMsgs (messages);}); Pero a partir de ahora, hay 2 cosas que me pregunto, ¿por qué hay un {} vacío, es donde puse cómo ordenarlo, porque también me gustaría ordenarlo por "timeStamp" DESC – user1306636

+0

Ok, si funciona para ti, luego recuperaré mi respuesta para que puedas aceptarla. No trabajo con node.js, así que no estaba seguro si lo busqué en Google :) Aparentemente, la sintaxis es (consulta, campos, opciones). Necesitamos esa '' {} 'vacía para poner las opciones en su lugar. –

Respuesta

22

Lo tienes casi correcto. Prueba con esto:

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

La sintaxis es find(query, fields, options). Necesitamos ese objeto vacío para que las opciones de interpretación del controlador sean correctas.

+3

Ese "objeto vacío" es para excluir campos específicos que se han devuelto en su conjunto de resultados. – jamjam

Cuestiones relacionadas