データベース接続に mongoose を使用しているときに、mongodb ドライバーを使用してデータベースの変更を監視するにはどうすればよいですか。Mongoose のドキュメントには、変更ストリームの使用方法に関する例はほとんどありません。私の場合、変更ストリームは、パイプライン オプションが提供されていない場合にのみ機能します。パイプライン オブジェクトの構文に問題があると思いましたが、mongodb ドキュメントの例に注意深く従いました。問題は、パイプライン オブジェクト、または変更ストリームが mongoose でどのように実装されているかにあります。どんな助けでも大歓迎です。
これが私の現在のアプローチです(これは機能しません):
mongoose
.connect(db, {
useNewUrlParser: true,
useFindAndModify: false,
useUnifiedTopology: true
// useCreateIndex: true
})
.then(() => {
console.log("Connected to MongoDB...");
})
.catch(err => {
console.log(err);
});
const pipeline = {
$match: {
$or: [{ operationType: 'insert' },{ operationType: 'update' }],
'fullDocument.institution': uniId
}
};
const options = { fullDocument: 'updateLookup' }
changeStream.on("change", next => {
switch(next.operationType) {
case 'insert':
console.log('an insert happened...', "uni_ID: ", next.fullDocument.institution);
let rooms = Object.keys(socket.rooms);
console.log("rooms: ", rooms);
nmsps.emit('insert', {
type: 'insert',
msg: 'New question available',
newPost: next.fullDocument
});
break;
case 'update':
console.log('an update happened...');
nmsps.emit('update', {
type: 'update',
postId: next.documentKey._id,
updateInfo: next.updateDescription.updatedFields,
msg: "Question has been updated."
});
break;
case 'delete':
console.log('a delete happened...');
nmsps.emit('delete', {
type: 'delete',
deletedId: next.documentKey._id,
msg: 'Question has been deleted.'
});
break;
default:
break;
}
})