将函数应用于从nodejs中的MongoDB查询返回的所有文档的字段

时间:2013-06-19 22:15:40

标签: node.js mongodb mongoose

我想将truncate(string,words)函数应用于mongoose查询返回的所有文章文档的“body”字段。一个例子如下:

Article.find({})
    .sort({'meta.created': 'desc'})
    .limit(6)
    .exec(function(err, articles) {
                // Truncate the article.body field on each articles here?
        res.render(articles: articles});
    });

使用简单的截断函数,例如:

function truncate(string, words) {
    var value_arr = string.split( ' ' );
    if( words < value_arr.length ) {
        value = value_arr.slice(0, words).join( ' ' );
    }
    return value;
}

如何将此功能应用于每个文章正文字段(保留文章结构以便在模板中使用)?提前致谢。

1 个答案:

答案 0 :(得分:2)

我认为,正确的方法是在您的文章中添加truncatedBody属性,并将truncate方法实现为static

Article.methods.setTruncatedBody = function(limit){
    //If truncatedBody is already computed, don't do anything
    if(this.truncatedBody) 
        return;

    var value_arr = body.split( ' ' );
    if( limit < value_arr.length ) {
        this.truncatedBody = value_arr.slice(0, words).join( ' ' );
    }
    else
        this.truncatedBody = body;
}

然后,在你的控制器中:

Article.find({})
    .sort({'meta.created': 'desc'})
    .limit(6)
    .exec(function(err, articles) {
        for(var article in articles)
            article.setTruncatedBody(5);
        res.render(articles: articles});
    });