Mongoose:过滤查询结果

时间:2015-07-23 18:14:01

标签: node.js mongodb mongoose

我正在构建一个Express + Mongoose网络应用程序,在我的一个视图中,我需要从模型中显示不同的对象子集。

具体来说,我ping了Mongo以获取Applications模型中的所有文档。每个应用程序可以具有不同的属性:提交日期,是否有评论(嵌入文档),是否具有属于当前登录用户的评论等。

我正在尝试加载所有应用程序(我需要),然后还创建此数组的副本,其内容根据上述属性进行过滤。所以最后,我将使用allApps,recentApps,reviewsApps,myReviewedApps等数组的哈希值。

Mongoose是一种方法,通过它我可以进一步过滤查询结果而无需ping数据库吗?或者我应该异步运行多个查询,然后将其传递给视图?

控制器

  list: function(req, res) {
    Application.find({}).populate('owner').exec(function (err, apps) {
      if (err) console.log(err);
      res.render('applications/list', {
        apps: apps,
        // other subsets of apps here
      });
    })
  },

模板

<div class="tab-content">
  <div role="tabpanel" class="tab-pane content-buffer-plus active" id="all">{{> _tableAllApps apps=apps }}</div>
  <div role="tabpanel" class="tab-pane fade content-buffer-plus" id="to-review">{{> _tableToReviewApps apps=apps }}</div>
  <div role="tabpanel" class="tab-pane fade content-buffer-plus" id="your-reviewed">{{> _tableYourReviewedApps apps=apps }}</div>

  <!-- these ones aren't done and I'm not even sure what to od about them yet... -->
  <div role="tabpanel" class="tab-pane fade content-buffer-plus" id="all-reviewed">{{> _tableAllReviewedApps apps=apps }}</div>
  <div role="tabpanel" class="tab-pane fade content-buffer-plus" id="waitlisted">{{> _tableAllApps apps=null }}</div>
  <div role="tabpanel" class="tab-pane fade content-buffer-plus" id="accepted">{{> _tableAllApps apps=null }}</div>
</div>

2 个答案:

答案 0 :(得分:1)

如果后续过滤相当简单,例如日期间隔或布尔标志,您可以通过mongoose查询最通用的集合,并在mongoose之外进行其他过滤。例如,假设您通过mongoose查询获取allApps,然后您可以使用简单的过滤器获取recentApps

ui-router

或已审核的应用

/login

进行更复杂的过滤,但您必须使用不同的查询再次调用mongoose

答案 1 :(得分:1)

也许您应该重新设计应用模型以应用discriminatoraggregate功能。