Mongodb通知文件更新

想象一下,如果我有一些mongodb与一些文件和一个nodejs服务器,从mongodb发送到客户端使用socket.io的json数据,并且一些进程已更新当前在客户端视图中的mongodb文档,我想知道是否有一种方式,以便mongodb通知nodejs服务器何时由客户自己以外的任何人更新对象,以便我可以通过打开的套接字发送更新的文档json,这样的事情可能吗?

我试图find一些资源在谷歌没有运气。

说这是一个文档模式

 'use strict'; import mongoose from 'mongoose'; var MessageSchema = new mongoose.Schema({ toid: String, fromid: String, toname: String, fromname: String, content: String, date: { type: Date, default: Date.now } }); export default mongoose.model('Message', MessageSchema); 

这里是后端代码,在哪里你改变文档的内容

 import {Router} from 'express'; var router = new Router(); router.post('/create/:id', function(req, res){ return Message.create(req.body) .then(respondWithResultAndEmitAnEvent(res, 201)) .catch(handleError(res)); }); 

所以这个respondWithResultAndEmitAnEvent函数看起来像这样,作为名称build议哪里甚至一个用户POST数据到服务器(比如在urlxyz.com/api/create/:id)服务器将发出一个事件,可以被其他客户端。

 function respondWithResultAndEmitAnEvent(res, statusCode) { statusCode = statusCode || 200; return function(entity) { if (entity) { socket.emit('message_added', entity); res.status(statusCode).json(entity); } }; } 

在客户端,你可以听到这个事件“message_added”并更新它。

  socket.on('message_added', function ( data ) { console.log(data); //update the client with new data; }); 

如果你控制了另一个进程,比我build议主动做,这意味着保存的过程是什么触发代码“观察”的变化。 否则,你可以做间隔轮询,但是这通常是低效率的,而且通常是不好的devise。 你也可以看看一些比较有趣的方法,比如看Mongo Oplog。

mongoose有一个middlawre: http ://mongoosejs.com/docs/middleware.html

您可以在保存和删除logging上运行脚本。 在这个脚本中,你可以做任何事情,包括通知你的通知服务器。