使用架构
var CommentSchema = new Schema({
text: { type: String },
replies: [{ type: mongoose.Schema.ObjectId, ref: 'Comment' }]
});
我有一个像
这样的查询Comment.findById(req.params.id)
.populate({
path: 'replies',
model: 'Comment',
options: {
limit: 2
}
})
.exec(...)
现在我看不到填充数组中有限数量元素的选项,保留数组的长度。
我考虑过填充到不同的“目标”字段,以便原始的回复数组保持不变(因此有关回复数量的信息)。但我认为这个选项在mongoose populate()中不存在。
可以在 Youtube评论上看到用例。评论包括回复数量,但仅显示有限数量的回复。
答案 0 :(得分:1)
我使用以下技巧来处理这种情况。
var idToSearch = mongoose.Types.ObjectId(req.params.id)
var aggregation = [
{$match : {_id : idToSearch}},
{$project : {
_id : 1,
replies: {$slice : ['$replies',5]},
totalreplies : {$size : "$replies"},
}}
];
models.Comment.aggregate(aggregation)
.exec(function(err, comments) {
if(err){
// return error
}
else if(!comments){
// return data not found
}else {
models.Comment.populate(comments,
{ path: 'replies'},
function(err, populatedComments){
if(err){
// return error
}
else {
console.log('comments ',populatedComments);
}
});
}
});
希望有所帮助