2017-02-11 56 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我定義了有問題的代碼,你可以看到這個 –