0

nodejs(v0.8.15)と最新のマングースを使用しています

だから、私はチャットからのメッセージでコレクションを持っています

{ message: String, date: Date, ... }

古いメッセージを削除し、最新のメッセージ (たとえば 30) を残すクエリを作成する必要があります。

例: データベースには 50 件のメッセージがあるため、ユーザーがチャットに入ると、古い 20 件を削除し、新しい 30 件を残します。100 件のメッセージ -> 70 件の削除、30 件の脱退。20 件のメッセージ -> 0 件の削除、20 件の脱退

おそらく唯一の方法は、作成methodまたはstatic機能することですが、よくわかりません。

ありがとうございました。

4

1 に答える 1

0

次のようなことを試すことができます:

Collection.statics.shift_messages = function( query, callback ) {
    Collection.find( query, "_id" ).sort( "-date" ).exec( function( err, msgs ) {
        if (err) {
            return callback( err );
        }
        var toRemove = msgs.slice( 30 );
        if (toRemove.length) {
            toRemove = toRemove.map( function(msg) { return msg._id; } );
            Collection.remove({ _id : { $in : toRemove } }, callback );
        } else {
            callback( );
        }
    });
};

そして、そのように使用します:

Collection.shift_messages( { user : "john" }, function( err ) {
    // yay, we're done shifting messages!
});

パフォーマンスdateを向上させるには、必ずインデックスをオンに設定してください。.sort

于 2012-12-04T09:44:11.047 に答える