2

我想做的是编写一个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用作包装器

4

1 回答 1

1

那是行不通的,因为allComments它是一个 MongooseQuery对象,而不是结果。您需要向您的方法添加一个回调参数,一旦异步调用完成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);
    }
});

不确定您在第二个关于“闭包函数”的问题中要问什么。

于 2012-11-06T21:16:57.827 回答