javascript - read - Monitoreando a Mongo por cambios con Node.js
node js mongodb get collection (4)
Casi 3 años desde la última respuesta. Sugeriría mirar:
- Pub Sub para nodejs y MongoDB https://github.com/scttnlsn/mubsub
npm install mubsub
debería llevarte allí
Estoy usando Node.js para algún trabajo de proyecto y me gustaría monitorear mi base de datos de Mongo (recopilación) para cambios, básicamente activar un evento si algo se agrega.
¿Alguien sabe si esto es posible? Estoy usando los controladores node-mongodb-native .
Si no es así, también me gustaría tener los punteros disponibles para enviar datos desde el servidor (ejecutar con el node
) al navegador del cliente.
La pregunta es si todos los datos se agregan a su base de datos a través de su aplicación node.js. Si es así, puede usar la clase EventEmitter de node.js para activar un evento ( http://nodejs.org/api.html#eventemitter-14 ).
Si la base de datos está poblada por alguna otra aplicación, las cosas se ponen difíciles. En este caso, necesitaría algo como un disparador de base de datos, que todavía no está disponible en MongoDB.
Empujar Eventos al Cliente (también conocido como Comet) será posible una vez que la API de websockets de HTML 5 llegue a todos los principales navegadores.
Mientras tanto, solo puedes tratar de emular este comportamiento usando técnicas como el sondeo (a largo plazo) de AJAX, el marco para siempre, etc., pero cada uno de ellos tiene sus debilidades.
Me gustaría activar la replicación en su mongodb. Hay una replica? base de datos que contiene una lista de cambios, similar al registro de replicación de mysql. Puedes monitorear eso.
-daniel
collection.insert ({"clave1": val1, "clave2": "val2"}, función (err, información) {
if (err) {// manejar este} else {if (info) {
usted llama a una función fireandforget (info); aquí puede escribir en registros o enviar a SQS o hacer algún otro engendro secundario o en proceso. Esto incluso podría ser una devolución de llamada, pero creo que un incendio y olvidar puede hacer en la mayoría de las circunstancias. Digo fuego y lo olvido porque supongo que no necesita retrasar la respuesta para que pueda devolver lo que necesite al cliente. Y en parte-respuesta a su otra pregunta, puede devolver JSON de esta manera
db.close();
var myJSON =[];
sys.puts("Cool info stored and did a non blocking fire and forget for some other mongo monitoring stuff/process and sending control back to the browser");
sys.puts(sys.inspect(info));//remove later
myJSON.push({"status":"success"});
myJSON.push({"key1":val1,"key2":val2});//or whatev you want to send
res.writeHead(200, { "Content-Type" : "text/plain" });
res.write(JSON.stringify(myJSON));
res.end();
}
}