0

我正在使用 nodejs (v0.8.15) 和最新的猫鼬

所以,我收集了来自聊天的消息

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

我需要进行查询以删除旧消息并留下最新消息,例如 30。

示例:数据库有 50 条消息,因此当用户进入聊天时,他将删除 20 条旧消息并留下 30 条新消息;100 条消息 -> 70 条删除,30 条离开;20 条消息 -> 0 条删除,20 条离开

也许唯一的方法是制造methodstatic发挥作用,但我不确定。

谢谢你。

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 回答