MongoDBのシェルでトリガーを実装する
MongoDBにはトリガーがありません。
そこで、OpLogを使って、トリガーの代替を実装します。
[応用]
MongoDBでは「非正規化」のサポートがありませんね。
このトリガー機能を使って、「非正規化」を実装してみました。
GitHub/MongoTrigger
そこで、OpLogを使って、トリガーの代替を実装します。
var option = DBQuery.Option.awaitData | DBQuery.Option.tailable;
var cursor = connect( 'local' ).oplog.rs.find().addOption( option );
cursor.skip( cursor.count() );
var stop = false;
while ( !stop ) {
var now = new Date();
while ( cursor.hasNext() ) {
var op = cursor.next();
if ( op.ns === 'test.stop' ) {
stop = true;
break;
}
do_something( op );
}
// Safety Trap for busy loop.
if ( (new Date()) - now < 100 ) {
break;
}
}
- DBQuery.Option.awaitData は、カーソルが空になった後、5秒待つようです。
- DBQuery.Option.noTimeout で無限に待たせたいのですが、このオプションの効果が分かりませんでした。
- [停止方法] testデータベースのstopコレクションにinsertかupdateすると、外側の無限ループを抜けます。
[応用]
MongoDBでは「非正規化」のサポートがありませんね。
このトリガー機能を使って、「非正規化」を実装してみました。
GitHub/MongoTrigger
スポンサーサイト