2013-12-18 54 views
0

我的代碼如下所示:MongoDB中,表示有多個條件找到_id數據

PostCategory.find({categoryid:category._id.str},function(err,postcategories){ 
      if(err) return next(err); 

      Post.find({_id:postcategories.postid},function(err,posts){ 
      if(err) return next(err); 
       return res.render(__dirname + "/views/categorydetail", { 
        title: 'İletişim', 
        stylesheet: 'contact' 
       }); 
      }); 
     }); 

我想找到的所有帖子裏面_id是postcategories.postid。我的後類別返回我的名單。這裏是我的postcategories型號:

module.exports = function(){ 
    var PostCategorySchema = new mongoose.Schema({ 
     postid:String, 
     categoryid:String, 
     createddate:{ type: Date, default: Date.now } 
    }); 

    mongoose.model("PostCategory",PostCategorySchema); 
}; 

任何想法?

回答

0

首先,你的貓鼬模型需要類似的東西:

var PostCategorySchema = new mongoose.Schema({ 
    postid: { type: mongoose.Schema.Types.ObjectId, ref: 'Post' }, 
    categoryid: { type: mongoose.Schema.Types.ObjectId, ref: 'Category' }, 
    createddate:{ type: Date, default: Date.now } 
}); 

mongoose.model("PostCategory", PostCategorySchema); 

ref選項告訴Mongoose在人羣中使用哪種模型,在我們的例子中是Post模型(categoryid字段的相同事項)。

之後,你的要求變得很簡單:

var query = PostCategory.find({ categoryid: category._id }); 
query.populate('postid'); 
query.exec(function (err, postcategories) { 
    if (err) return next(err); 
    // res.render('......'); 
}); 

欲瞭解更多信息,請閱讀Mongoose Query Population文檔。

編輯:

所以,如果你有一個以上的postpostcategory,更新模型:

var PostCategorySchema = new mongoose.Schema({ 
    postid: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Post' }], 
    categoryid: { type: mongoose.Schema.Types.ObjectId, ref: 'Category' }, 
    createddate:{ type: Date, default: Date.now } 
}); 
+0

好方法。謝謝。但我有不止一個職位。 postcategories返回列表。我必須找到所有的帖子發送給他們查看。 – fuat

+0

我編輯了我的答案。 'postid'現在被'[]'包圍。如果你滿意,不要忘記接受答案。 –

+0

非常感謝 – fuat

0

簡單的方法就是:

PostCategory.find({categoryid:category._id.str},function(err,postcategories){ 
    if(err) return next(err); 

    var ids = []; 
    _.each(postcategories, function(postCategory){ 
     ids.push(postCategory.postid); 
    }); 

    Post.find({_id : { $in : ids } },function(err,posts){ 
     if(err) return next(err); 

     return res.render(__dirname + "/views/categorydetail", { 
      title: 'İletişim', 
      stylesheet: 'contact' 
     }); 
    }); 
)}; 

在我的例子中,我使用underscoreJS獲取postCategories列表

+0

它不使用貓鼬的最佳方法(無論是最簡單的方法)。看看這裏的文檔:http://mongoosejs.com/docs/populate.html –