2015-08-19 1 views
0

J'ai des difficultés à trouver la bonne syntaxe pour mon curseur trié.Tri d'un curseur mongoDb

Ce qu'il faut faire est de retourner un curseur trié que je peux ensuite parcourir après le traitement de chaque élément.

Voilà ma fonction qui fonctionne parfaitement sans le genre, mais ne renvoie rien une fois sort() ajouté (je soupçonne fortement un problème de syntaxe mais ne peut pas sembler trouver le bon doc):

db.collection('products').find({}).sort({rnd: 1},function(err, cursor){ 
    console.log(found); 
    if(err){ 
     console.log(err); 
    } 
    function processItem(err, item) { 
     if(err){ 
      console.log(err); 
     } 
     if(item === null) { 
      console.log('cursor exhausted'); 
      db.close(); 
     }else{ 
      someAsyncOperation(item,function(){ 
       cursor.nextObject(processItem); 
      }); 
     } 
    } 
    cursor.nextObject(processItem); 
}); 
+0

Quand vous dites cela fonctionne sans le genre() qu'est-ce que l'apparence de code alors? N'avez-vous pas besoin de fermer l'appel de méthode de tri avant la fonction javascript: .sort ({rnd: 1}), et supprimez le crochet de fermeture à la fin:}; – robjwilkins

+0

ouais, sans le tri, il ressemble à: 'db.collection ('products'). Find ({}, fonction ...' – xShirase

Répondre

0

je faisais une mauvaise hypothèse sur la syntaxe. Le curseur retourné par find() besoins à trier, puis itérées comme ceci:

var cursor = db.collection('products4Scrape').find({}).sort({rnd: 1}); 
iterateCursor(); 

function iterateCursor(){ 
    if(err){ 
     console.log(err); 
    } 
    function processItem(err, item) { 
     if(err){ 
      console.log(err); 
     } 
     if(item === null) { 
      console.log('cursor exhausted'); 
      db.close(); 
     }else{ 
      someAsyncOperation(item,function(){ 
       cursor.nextObject(processItem); 
      }); 
     } 
    } 
    cursor.nextObject(processItem); 
}