【发布时间】:2016-03-21 18:16:07
【问题描述】:
我正在构建一个 Express + Mongoose 网络应用程序,在我的一个视图中,我需要显示模型中对象的不同子集。
具体来说,我 ping Mongo 以获取 Applications 模型中的所有文档。每个应用程序可以有不同的属性:提交日期、是否有评论(嵌入文档)、是否有属于当前登录用户的评论等。
我正在尝试加载所有应用程序(我需要),然后还创建此数组的副本,其内容根据上述属性进行过滤。所以最后,我会有一个包含 allApps、recentApps、reviewApps、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>
【问题讨论】:
-
我在 MongoDB 文档中找到的另一个答案。 [$addToSet][1] 允许用户创建“别名”数组属性,对每个 $group 修饰符中的项目进行分组。由于我没有经常练习 MongoDB(或 Mongoose),所以我不能举个例子。 [1]:docs.mongodb.org/manual/reference/operator/aggregation/addToSet