comments
,其中包含我得到的所有评论。我的目标是通过id选择一篇文章,填充其作者字段以及评论中的作者字段。然后按日期对评论子文档进行排序。
文章模式如下:
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 }
});
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 对象,这样我就可以保留我的 getters / virtuals,但是方法呢?
无论如何,我在纯对象上执行排序逻辑,然后完成。
我相信有更好的方法来完成这个任务,请告诉我。
save()
相比,不存在覆盖更改的可能性。 - Blakes Seven