1

次のようなマングーススキーマがあります。

var postSchema = new Schema({
    ...
    tags : [{ type: Schema.Types.ObjectId, ref: 'Tag' }]
});

特定のタグを持つ投稿を返す静的メソッドを実装しようとしています。何かのようなもの:

postSchema.statics.searchByTag = function searchByTag (tag, cb) {
  return this.find().populate('tags')
             .where("tags contains the element tag")
             .exec(cb);
};

質問:

  1. 静的メソッドで populate を使用できますか?
  2. 「タグ」に「タグ」が含まれているかどうかを確認する最良の方法は何ですか?

助けてくれてありがとう。

4

1 に答える 1

4

これが私の答え/解決策です。1)はい、静的メソッドで動作します。2)これは私が問題を解決した方法であり、最も効率的な方法ではないかもしれませんが、うまくいきます:

postSchema.statics.searchByTag = function searchByTag (tagId, cb) {
    var Posts = [];
    this.find({})
    .populate('author tags')
    .exec(function(err,posts){
    if(err){
        cb(err);
    }else{
        posts.forEach(function(post){
        post.tags.forEach(function(tag){
            if(new String(tag._id).valueOf() == new String(tagId).valueOf()){
            Posts.push(post);
            }
        });         
        });
        cb(null,Posts);
    }
    });
}
于 2014-11-25T19:47:52.827 に答える