Comment diffuser de la MongoDB les Résultats de la Requête avec nodejs?
J'ai été la recherche d'un exemple de comment je peux diffuser le résultat d'une MongoDB requête à un nodejs client. Toutes les solutions que j'ai trouvé jusqu'à présent semblent à lire le résultat de la requête à la fois et ensuite envoyer le résultat au serveur.
Au lieu de cela, je voudrais (bien évidemment) comme pour la fourniture d'un rappel à la méthode de requête et ont MongoDB appel que lors de la partie suivante de l'ensemble des résultats est disponible.
J'ai été à la recherche à la mangouste - je devrais probablement utiliser un autre pilote?
Jan
Vous devez vous connecter pour publier un commentaire.
Streaming dans la Mangouste est devenu disponible dans la version 2.4.0 qui est apparu trois mois après que vous avez posté cette question:
Plus élaboré exemples peuvent être trouvés sur leur page de documentation.
Mongoose: Query.prototype.stream() is deprecated in mongoose >= 4.5.0, use Query.prototype.cursor() instead
node-mongodb-pilote
(la couche sous-jacente que chaque client utilise mongoDB en nodejs) à l'exception de l'API de curseur que d'autres ont mentionné a une belle flux API (#458). Malheureusement, je n'ai pas trouver documentée ailleurs.Mise à jour: il y a des docs aussi ici.
Il peut être utilisé comme ceci:
Il en fait met en œuvre la ReadableStream interface, donc il a tous les goodies (mettre en pause/reprendre etc)
mongoose
n'est pas vraiment "pilote", c'est en fait un ORM wrapper autour de la MongoDB pilote (node-mongodb-natif
).À faire ce que vous faites, regardez le conducteur
.find
et.each
méthode. Voici un code à partir de ces exemples:Pour diffuser les résultats, vous êtes essentiellement en remplacement de ce
sys.puts
avec votre "flux" de la fonction. Pas sûr de savoir comment vous envisagez de diffuser les résultats. Je pense que vous pouvez faireresponse.write() + response.flush()
, mais vous pouvez également commandersocket.io
.EventEmitter
aussi semble correct. Si vous avez un bon exemple, nous pouvons mettre à jour cette réponse avec quelque chose de plus détaillé.Voici la solution que j'ai trouvé (merci de me corriger si quelqu'un qui est la mauvaise façon de le faire):
(Aussi excuser le mauvais codage - trop tard pour moi maintenant, pour embellir ce)
J'ai été étudiant mongodb flux de moi-même, je n'ai pas la totalité de la réponse que vous cherchez, je fais partie de lui.
vous pouvez configurer un socket.io flux
c'est à l'aide de javascript support.io et de la prise.io-streaming disponible au MNP
aussi mongodb pour la base de données car
à l'aide d'un vieux de 40 ans de la base de données qui a des problèmes est incorrect, le temps de se moderniser
aussi les 40 ans de la db SQL et SQL ne fait pas dans le flux, à ma connaissance,
Donc, même si vous avez des questions sur les données du serveur au client, je tiens également à obtenir le client à un serveur dans ma réponse parce que je ne peux JAMAIS trouver n'importe où quand je fais une recherche et je voulais installer un seul endroit à la fois envoyer et recevoir des éléments via flux afin que chacun puisse obtenir le blocage de celui-ci rapidement.
côté client de l'envoi des données vers le serveur via le streaming
serveur recevant des flux à partir du côté client et ensuite répondre quand fait
//C'est l'autre moitié de la collecte de données et de diffusion pour le client
côté client de demander et de recevoir des flux de données à partir du serveur
côté serveur répondant à la demande pour le streaming de données
Le dernier il est le seul où je suis un peu juste en le tirant hors de mon cul parce que je n'ai pas encore essayé, mais cela devrait fonctionner. J'ai réellement faire quelque chose de similaire, mais je écrire le fichier sur le disque dur puis de l'utiliser fs.createReadStream à transmettre à la client. Donc, pas sûr que si 100% mais d'après ce que j'ai lu il devrait être, je vais revenir à vous une fois que j'ai tester.
P. s. quelqu'un veut-bug-moi au sujet de mon familier façon de parler, je suis Canadienne, et j'aime le dire "hein" venez à moi avec vos caresses et coups bros/sis' 😀