【发布时间】:2016-08-17 22:02:27
【问题描述】:
我有一个 Mongoose 模型,其中包含需要填充的路径:
var adsSchema = new Schema({
price: { type: Number, min: 0, required: true },
author: { type: ObjectId, ref: 'Users', required: true },
title: { type: String, required: true },
date: { type: Date, default: Date.now },
offers: [{
price: { type: Number, required: true },
date: { type: Date, default: Date.now },
offerBy: { type: ObjectId, ref: 'Users', required: true }
}],
category: { type: ObjectId },
images: [{
type: ObjectId,
ref: 'Images'
}],
videos: [String]
});
在某些 GET 请求中,我需要填充许多字段,特别是按“价格”升序排序的报价。
由于那里显示了 Mongoose 的文档 (http://mongoosejs.com/docs/api.html#query_Query-populate),您可以按子路径排序。
我的问题是事实并非如此。
有我的代码正在这样做:
Ads.findOne({ _id: adId })
.populate({ path: 'author', select: 'firstName lastName' })
.populate('images')
.populate({ path: 'offers', options: { sort: { 'price': -1 } })
.populate({ path: 'category', select: 'name' })
.exec(function (err, ad) {
if (err)
deferred.reject({ status: 500, message: 'Database error.' });
else if (!ad)
deferred.reject({ status: 500, message: 'The ad doesn\'t exist!.' });
else {
deferred.resolve(ad.toJSON());
}
})
我已尽可能多地阅读此处或 Mongoose 邮件列表中给出的问题/答案:
我知道不可能从子文档结果中对文档结果进行排序,好的。但我只想对那个子文档进行排序,而且只有这个。这里的一些回复似乎说这是可能的:
我有两个问题:
- 是否有可能(如 Mongoose 文档所写)在填充期间对子文档进行排序?
- 这是否与我不只是将 ObjectId 链接到其他 Schema 的事实有关?
感谢您的回答;)
【问题讨论】:
标签: node.js mongodb sorting mongoose-populate