Mongodb,用_id表示具有多个条件的数据

时间:2013-12-18 15:00:29

标签: javascript node.js express mongoose

我的代码如下所示:

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返回我的列表。这是我的postcategories模型:

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

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

有什么想法吗?

2 个答案:

答案 0 :(得分: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'
        });
    });
)};

在我的示例中,我使用下划线JS来获取帖子类别列表

答案 1 :(得分:0)

首先,你的Mongoose模型必须是这样的:

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文档。

编辑:

因此,如果post有多个postcategory,请将模型更新为:

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 }
});