2014-01-16 2 views
11

mongodb에서 mongodb에서 socket.io를 사용하여 json 데이터를 내보내는 nodejs 서버가 있다고 상상해보십시오. 일부 프로세스는 현재 클라이언트에있는 mongodb 문서를 업데이트했습니다 볼 수있는 방법이 있는지 궁금해서 mongodb가 nodejs 서버에 객체가 클라이언트 자신이 아닌 다른 사람에 의해 업데이트 될 때 그 객체가 공개 소켓을 통해 업데이트 된 문서 json을 내보낼 수 있다고 알려주는 것이 가능한가?문서에서 Mongodb가 업데이트 됨 업데이트 됨

Google에서 행운이있는 리소스를 찾으려고했습니다.

+0

MongoDB를 업데이트하는 프로세스를 제어 할 수 있습니까? – srquinn

+0

@jibsales 예,하지만 다른 서버 및 수동으로 일을하는 방법을 알고 있지만 일들에 도움이 될 수 있습니다 궁금해했다 – Kanka

+0

후크, 트리거, 청취자 등에 대한 네이티브 지원은 없지만 다음 SO 포스트를 확인하십시오. 가장 upvotes가 아닌 허용 대답) : http://stackoverflow.com/questions/9691316/how-to-listen-for-changes-to-a-mongodb-collection – srquinn

답변

0

다른 프로세스를 제어 할 수 있다면 능동적으로 수행하는 것이 좋습니다. 즉, 저장 프로세스가 변경 사항을 "감시하는"것임을 의미합니다. 그렇지 않으면 간격 폴링을 수행 할 수는 있지만 일반적으로 비효율적이며 일반적으로 나쁜 디자인입니다. Mongo Oplog를 보는 것과 같은 재미있는 방법을 살펴볼 수도 있습니다.

+0

oplog는 쿼리 만 표시 할뿐 실제로 영향을받는 문서는 표시하지 않습니다. –

2

이 문서 스키마

'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 기능 모습 뭔가 말 이름으로 사용자가 서버에 데이터를 POST하는 곳 (예 : url xyz.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"를 청취하고 업데이트 할 수 있습니다. http://mongoosejs.com/docs/middleware.html

저장하고 삭제 된 레코드에서 스크립트를 실행할 수 있습니다

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

은 몽구스는 middlawre 있습니다. 이 스크립트에서는 알림 서버에 알림을 포함하여 모든 작업을 수행 할 수 있습니다.

관련 문제