mongoose在where子句不起作用后找到populate

时间:2017-02-11 06:19:13

标签: node.js mongoose

我无法在mongoose中填充并找到指定的类别帖子。它总是返回我的所有帖子,它不会过滤指定类别名称的帖子,在 searchQuery.category 我通过搜索的类别。

new_node

这是我的代码,它不会评估类别。

此代码为我提供过滤记录

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

1 个答案:

答案 0 :(得分:1)

.populate方法的工作方式略有不同。 它不会过滤原始集合。相反,它会将您传递的查询应用于已填充的集合。如果查询适用,则填充。否则 - 设置null而不是填充文档。 因此,无视此class CreateAccountsAccountMembership < ActiveRecord::Migration[5.0] def change create_table :accounts_account_memberships do |t| t.references :accounts_account, index: { name: 'index_accts_acct_mbrships_on_accts_acct_id' } t.references :users_account_member, polymorphic: true, index: { name: 'index_accts_acct_mbrships_on_users_acct_member_type_and_id' } t.timestamps null: false end end end ,您仍会收到所有帖子。

有两种解决方法。

  1. 获取所有帖子并过滤掉类别为nu​​ll(未填充)的位置
  2. 使用$ lookup运算符聚合并在DB级别填充