2017-02-11 41 views
0

我不能填充和找到猫鼬指定的类别帖子。它总是返回我的所有帖子,它不过滤指定类别名称的帖子,在searchQuery.category我传递搜索的类别。猫鼬发现与填充后where子句不工作

var query = posts.find(); 
if (searchQuery.tags) { 
    searchQuery instanceof Array ? 
     query.where('tags').in(searchQuery.tags) : 
     query.where('tags').equals(searchQuery.tags); 
} 
if (searchQuery.publish) { 
    query.where('publish').equals(true); 
} 
if (searchQuery.category) { 
    query.populate({ 
     path: 'category', 
     match: { name: searchQuery.category }, 
     model :'Category' 
    }); 
} 
if (searchQuery.series) { 
    query.populate({ 
     path: 'series', 
     match: { name: searchQuery.series } 
    }); 
} 
return countPost(searchQuery).then(function (count) { 
    return query.select('title heading tags description blogImage createAt') 
     .skip(((parseInt(pageNo, 10) || 1) - 1) * parseInt(limit, 10)) 
     .limit(parseInt(limit, 10) || 10) 
     .exec() 
     .then(function (posts) { 
      return { post: posts, total: count, currentPage: pageNo, limit: limit }; 
     }); 
}); 

在这里我的代码,它不评估类别。

这个代码给我过滤记录

query.populate({ 
     path: 'category', 
     match: { name: searchQuery.category }, 
     model :'Category' 
    }).exec(function(err, post){ console.log(post)}); // this query return only searchedQuery object. 

回答

1

的.populate方法都有所不同。 它不会过滤原始集合。相反,它将您传递的查询应用到已填充的集合。如果查询适用它填充。否则 - 设置null而不是填充文档。 因此无视此match: { name: searchQuery.series }您仍将收到所有帖子。

有两种解决方法。

  1. 获取所有的职位,并筛选出其中的类别为空(未安装)以$查找操作
  2. 使用聚合和DB水平填充
+0

感谢答复,.populate({.. })。exec()返回过滤结果,但如果我不使用exec来填充,那么它将返回所有帖子,为什么? –

+0

@AnkitRana你可以请你说明你是如何调用它与没有exec()?你会得到什么结果。 –

+0

@ Antonio我定义了有问题的代码,你可以看到这个 –