2017-02-11 5 views
0

私はmongooseにカテゴリの投稿を指定して見つけられません。それは常に私にすべての投稿を返す、それはカテゴリ名を指定して投稿をフィルタリングしませんsearchQuery.category私は検索されたカテゴリを渡します。mongoose where 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 }; 
     }); 
}); 

ここで私のコードは、カテゴリを評価しません。

このコードは私に.populate方法が少し異なる動作をフィルタ処理、レコード

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

答えて

1

を与えます。 元のコレクションはフィルタリングされません。代わりに、渡されたクエリーが移入されたコレクションに適用されます。照会が適用されると、その照会が取り込まれます。 Else - 入力されたドキュメントの代わりにnullを設定します。 これを無視しても、match: { name: searchQuery.series }にすべての投稿が届きます。

これを解決する方法は2つあります。

  1. は、すべての記事を取得し、カテゴリがnullである場合(読み込まない)$検索演算子と
  2. 使用集約をフィルタリングし、DBのレベルでの応答のための
+0

感謝、.populateを({移入します.. })。exec()はフィルタの結果を返しますが、もし私がpopulateを使ってexecを使用していなければ、それはすべての投稿を返します、なぜですか? –

+0

@AnkitRana exec()を使用して、使用しないで、正確にどのように呼び出すのかを教えてください。そしてあなたが得ている結果は何ですか。 –

+0

@ Antonio私はあなたがこれを見ることができる問題のコードを定義します –

関連する問題