2017-11-07 24 views
-1

나는 내 mongodb에서 빠르게 증가하는 콜렉션을 가지고있다. 새 문서가 컬렉션에 삽입되면 특정 작업을 수행하려고합니다. 그런 새로운 모델을 삽입했을 때 어떻게 행동을 관찰하고 트리거 할 수 있습니까?MongoDB + ExpressJS - 삽입 관찰

나는 mongo-observer과 같은 오래된 솔루션을 발견했지만 꽤 오래되어서 나에게 도움이되지 못했습니다.

누구나 비교적 새롭고 유지 보수가 잘되는 솔루션을 추천 할 수 있습니까?

+0

질문 ** ** 오프 주제 스택 오버플로에있는 책, 도구, 소프트웨어 라이브러리, 자습서 또는 다른 오프 사이트 리소스를 권장하거나 찾기 위해 우리를 요청 . 대신, [문제 설명] (http://meta.stackoverflow.com/questions/254393) 및 지금까지 해결 된 사항은 무엇입니까? –

답변

-2

npm 모듈 - mongohooks을 참조 할 수 있습니다.

업데이트 :

추가 샘플 코드 :

const db = require('mongojs')('mydb', ['members']); // load mongojs as normal 
const mongohooks = require('mongohooks'); 

// Add a `createdAt` timestamp to all new documents 
mongohooks(db.members).save(function (document, next) { 
    document.createdAt = new Date(); 
    next(); 
}); 

// Now just use the reqular mongojs API 
db.members.save({ name: "Thomas" }, function (error, result) { 
    console.log("Created %s at %s", result.name, result.createdAt); 
}); 
0

schema.pre() 후크 그것을 할 것입니다. 예 : 그들은 자기 의견을 고집 답변 스팸을 유치하는 경향이

export const schema = new mongoose.Schema({ 
    name: String, 
    username: { 
     type: String, 
     required: true, 
     unique: true 
    }, 
    password: { 
     type: String, 
     required: true 
    } 
}, { timestamps: { createdAt: "created_at", updatedAt: "updated_at" } 
}); 

schema.pre("save", function (next) { 
    bcrypt.hash(this.password, 10, (err, hash) => { 
     this.password = hash; 
     next(); 
    }); 
}); 

schema.pre("update", function (next) { 
    bcrypt.hash(this.password, 10, (err, hash) => { 
     this.password = hash; 
     next(); 
    }); 
}); 
+0

해당 스키마에 대량 작업을 수행하기위한 사전/사후 훅이 있습니까? – phoebus

+0

[pre and post hooks] (http://mongoosejs.com/docs/middleware.html)는 변경된 모든 문서에 대해 작동하므로 대량 작업에도 사용할 수 있습니다. 전체 컬렉션을 위해 무언가를 변경하려면 [migrate] (https://www.npmjs.com/package/migrate)와 같은 것을 찾고있을 것입니다. –

+0

제 경우에는 마이그레이션 할 필요가 없습니다. 데이터베이스에 개체를 대량 업로드하고 있습니다. 그리고 그 중 하나가 upserted 때마다, 나는 또 다른 행동을 시작하고 싶다. post "save"와 "update"그리고 많은 다른 것들은 bulk.find(). upsert(). update()를 사용할 때 불행히도 트리거되지 않습니다. – phoebus