我正在构建一个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>
答案 0 :(得分:1)
如果后续过滤相当简单,例如日期间隔或布尔标志,您可以通过mongoose查询最通用的集合,并在mongoose之外进行其他过滤。例如,假设您通过mongoose查询获取allApps,然后您可以使用简单的过滤器获取recentApps
ui-router
或已审核的应用
/login
进行更复杂的过滤,但您必须使用不同的查询再次调用mongoose
答案 1 :(得分:1)
也许您应该重新设计应用模型以应用discriminator或aggregate功能。