【发布时间】:2015-10-01 16:12:33
【问题描述】:
我有一个文章架构,它有一个子文档comments,其中包含我为这篇特定文章获得的所有 cmets。
我要做的是按 id 选择一篇文章,填充其作者字段以及 cmets 中的作者字段。然后按日期对 cmets 子文档进行排序。
文章架构:
var articleSchema = new Schema({
title: { type: String, default: '', trim: true },
body: { type: String, default: '', trim: true },
author: { type: Schema.ObjectId, ref: 'User' },
comments: [{
body: { type: String, default: '' },
author: { type: Schema.ObjectId, ref: 'User' },
created_at: { type : Date, default : Date.now, get: getCreatedAtDate }
}],
tags: { type: [], get: getTags, set: setTags },
image: {
cdnUri: String,
files: []
},
created_at: { type : Date, default : Date.now, get: getCreatedAtDate }
});
文章架构上的静态方法:(我想在这里对 cmets 进行排序,我可以这样做吗?)
load: function (id, cb) {
this.findOne({ _id: id })
.populate('author', 'email profile')
.populate('comments.author')
.exec(cb);
},
我必须在别处排序:
exports.load = function (req, res, next, id) {
var User = require('../models/User');
Article.load(id, function (err, article) {
var sorted = article.toObject({ getters: true });
sorted.comments = _.sortBy(sorted.comments, 'created_at').reverse();
req.article = sorted;
next();
});
};
我调用toObject 将文档转换为javascript 对象,我可以保留我的getter / virtuals,但是方法呢??
无论如何,我对普通对象执行排序逻辑并完成。
我很确定有很多更好的方法可以做到这一点,请告诉我。
【问题讨论】: