mongodb查询到javascript函数

时间:2012-11-06 21:10:25

标签: javascript mongodb closures mongoose

我想要做的是编写一个javascript函数来访问我的articles文件中定义的.js架构。

我已经确定以下查询在mongodb终端中有效:

    db.articles.ensureIndex( { "comments.user_id" : 1 } )
        db.articles.find( { "comments.user_id" : 987654 } ) // returns all document fields, meaning X and Y including comments

        db.articles.find( { "comments.user_id" : 987654 }, 
{ "title" : 1, "comments.user_id" : 1 })   //some trimming

javascript函数的目的是检索特定用户发出的所有注释,我的下面尝试是否正确对应上面的mongodb查询?风格,语法是否被认为是良好的实践?

exports.allCommentsByUser = function(userId){ 
   db.articles.ensureIndex({"comments.user_id" : 1})
    var allComments = db.articles.find({"comments.user_id" : userId}, 
                  { "title" : 1, "comments.user_id" : 1 });
    return allComments;
}

问:此外,如何将上述javascript函数转换为闭包函数?

注意:我使用mongoose作为包装

1 个答案:

答案 0 :(得分:1)

这不起作用,因为allComments是一个Mongoose Query对象,而不是结果。您需要在allCommentsByUser方法中添加一个回调参数,该方法将在异步find调用完成后将结果提供给调用方。

exports.allCommentsByUser = function(userId, callback){ 
    db.articles.find(
        {"comments.user_id" : userId}, 
        { "title" : 1, "comments.user_id" : 1 }, 
        callback);
};

方法的用法:

x.allCommentsByUser(userId, function (err, articles) {
    if (err) {
        console.error(err);
    } else {
        console.log(articles);
    }
});

不确定你在第二个问题中提出的关于'封闭功能'的内容。