2016-07-25 11 views
1

Hier ist der Code von meinem node.js Backend:Iterate über MongoDB Cursor von Aggregat

app.get('/getpossibleconnections', auth, function(req, res){ 
    if (req.authenticated == false){ 
     res.send("Your session has expired."); 
    } else { 
     User.aggregate([ 
      { $match: { _id: { $nin: req.decoded.username.connections } } }, 
      { $sample: { size: 10 } }, 
     ]).next(function(err, docs) { 
      console.log("horray"); 
     }); 
    } 
}); 

Ich habe versucht zu ersetzen next() mit toArray() und each() wie hier vorgeschlagen:

http://mongodb.github.io/node-mongodb-native/2.0/tutorials/aggregation/

jedoch Ich erhalte jedes Mal denselben Fehler:

TypeError: User.aggregate(...).next is not a function

Warum kann ich nicht über die zurückgegebenen Dokumente mit irgendeiner Funktion iterieren?

Liegt das daran, dass User keine Sammlung ist?

+0

eine mögliche Lösung wäre, einfach einen Callback zu übergeben und das Ergebnis zu iterieren – Radioreve

+0

was ist die Variable "User" zugewiesen? in dem Link zur Verfügung gestellt, sie eine Verbindung zu einer Datenbank und dann eine Variable zu einer Sammlung in dieser Datenbank setzen, machst du das gleiche? – devonJS

+0

@devonJS Benutzer ist ein Modell, aber ich benutze Mungo und von dem, was ich verstehe, verbindet Mungo automatisch eine Sammlung mit jedem Modelltyp. – db2791

Antwort

3

Versuchen Sie folgendes:

var cursor = User.aggregate([ 
    { $match: { _id: { $nin: req.decoded.username.connections } } }, 
    { $sample: { size: 10 } }, 
]).cursor().exec(); 

cursor.each(function(err, doc) { 
    //do something with doc 
}); 

Mongoose Griffe ein Aggregat zu Cursor-Objekt anders als MongoDB-native, wie Sie in Ihrem Link gepostet. Weitere Informationen finden Sie hier: mongoose aggregate cursor documentation

+0

Du bist eine absolute Legende. Danke vielmals – db2791