node.js – Mongoose:过滤查询结果

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

具体来说,我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>

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

var recentApps = allApps.filter(function (app) { return (Date.now() - appDate) > threshold; });

或者对于reviewApps

var reviewedApps = allApps.filter(function (app) { return app.isReviewed; });

对于更复杂的过滤,虽然您必须使用不同的查询再次调用mongoose

点赞