2

私がやろうとしているのは、ファイル内の定義済みarticlesスキーマにアクセスするための JavaScript 関数を作成することです。.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;
}

Q: さらに、上記の 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);
    }
});

「閉鎖機能」に関する2番目の質問で何を求めているのかわかりません。

于 2012-11-06T21:16:57.827 に答える