Requête de recherche MongoDB ne renvoyant pas toutes les valeurs

J’ai une collection de valeurs de capteurs mongoDB dans laquelle j’essaie de trouver tous les documents de la collection qui se trouvent dans une plage de dates donnée. J’ai lu les documents et j’ai implémenté le code pour trouver toutes les données. Cependant, j’écris ensuite tous les documents dans un fichier CSV afin de pouvoir les télécharger à partir du Web. Le problème que je rencontre est que la requête semble rechercher toutes les données dans la plage de dates correcte (j’ai imprimé les dates à la fois du côté serveur et du côté client et les deux correspondent pour la plage de dates correcte) Cependant, le fichier CSV ne renvoie qu’environ la moitié des données (ce n’est jamais cohérent). Par exemple, supposons que je demande à ma collection de renvoyer tous les documents stockés entre:

(Jeu. Mai 09 2013 07:57:06 GMT-0400) et (mar 14 mai 2013 00:40:43 GMT-0400)

Lorsque je clique sur le bouton de téléchargement de données, il envoie une demande au serveur afin de rechercher tous les documents compris dans cette plage, puis de les transférer dans un fichier texte et de les restituer au client. J’imprime sur la console les dates sur le serveur et le client, et tout concorde … donc je suis à peu près sûr que la fonction de recherche mongodb utilise les dates correctes dans sa requête.

Cependant, lorsque j’ouvre le fichier CSV pour cette requête, il me donne une liste de documents allant de (jeu 09 mai 2013 07:57:15 -> la première entrée de date à la date de début) … mais ne renvoie que valeurs à (sam 11 mai 2013 01:04:09). Cela représente environ trois jours de données qui semblent manquer à la requête. Étant donné que mes capteurs téléchargent des données dans la collection toutes les 8 secondes, il s’agit de milliers d’entrées. Existe-t-il une sorte de limite de données sur le nombre de documents pouvant être récupérés à l’aide de la fonction de recherche? Le fichier CSV contient près de 6 850 entrées (du jeudi au samedi) … mais pourquoi ne renverrait-il pas la liste complète des valeurs entre le jeudi et le mardi? J’ai vérifié la firebase database et je sais qu’elle a stocké des données de manière cohérente pendant cette période … alors je ne pense pas que ce soit le problème. Quelqu’un a-t-il une idée?

Voici le code de ma fonction de recherche:

collection.find({"addr": Number(json.addr), "Time": {$gte:new Date(json.startDate), $lte:new Date(json.endDate)}}, proj, function (err, docs) { if( err || !docs) console.log("No data found"); else { var tempname=json.type+".csv"; var stream=fs.createWriteStream("pages/"+tempname); stream.on('error', function(e){console.error(e);}); docs.each(function(err2, doc) { if (!doc) { console.log("done"); stream.end(); res.writeHead(200, {"Content-Type": "application/json"}); res.write(JSON.ssortingngify({fname:tempname})); res.end(); return; } stream.write(doc.Time+","+doc[json.type]+"\n"); }); } }); 

stream.write() renvoie false lorsque la mémoire tampon est saturée. Vous devez donc vérifier cela.

Voir aussi [Ecriture de fichiers volumineux avec Node.js] pour plus d’informations.