2012-04-02 2 views
9

Ich habe diese Abfrage in MongoDBAuf MongoDB wie kann ich die Abfrage einschränken, wenn mein Rückruf innerhalb "finden" ist?

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

Es funktioniert perfekt, mit Ausnahme der Tatsache, dass ich 50 Ergebnisse.

Ich habe dies versucht:

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

Aber das half auch nicht, also habe ich versucht diese, unter dem es auch nicht helfen zu begrenzen.

Wie kann ich die Anzahl der Ergebnisse von dieser Abfrage begrenzen, und rufen Sie den Rückruf immer noch auf die gleiche Weise wie ich habe?

+0

Also, erhalten Sie mehr als 50 Dokumente und Sie wollen nur 50? –

+0

@SergioTulentsev Fast sah ich schnell einen Code hier, die sehr gut gearbeitet, es war dies: db.privateMessages.find ({$ oder: [{AbsenderID: userId, EmpfängerID: socket.userId}, { AbsenderID: socket.userId, toId: userId}], {}, {Limit: 10}, Funktion (Fehler, Nachrichten) {pushSvdMsgs (Nachrichten);}); Aber von jetzt an gibt es 2 Dinge, die ich frage, warum gibt es ein leeres {}, ist das, wo ich legte, wie ich es bestellen, weil ich es auch gerne bestellen würde durch "timeStamp" DESC – user1306636

+0

Ok, wenn es arbeitet für Sie, dann lösche ich meine Antwort, damit Sie sie annehmen können. Ich arbeite nicht mit node.js, also war ich mir nicht sicher, ob ich es richtig gegoogelt habe :) Anscheinend ist die Syntax (Abfrage, Felder, Optionen). Also brauchen wir das leere '{}' um Optionen an ihre Stelle zu setzen. –

Antwort

22

Sie haben es fast richtig. Versuchen Sie dieses:

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

Die Syntax find(query, fields, options) ist. Wir brauchen dieses leere Objekt, damit der Treiber die Optionen richtig interpretieren kann.

+3

Das "leere Objekt" ist für den Ausschluss bestimmter Felder von Ihrer Ergebnismenge zurückgegeben. – jamjam

Verwandte Themen