在数组中填充有限数量的项目,但保持数组长度 - 猫鼬
Populate limited number of items in array, but keep array length - mongoose
有了架构
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(...)
现在我看不到 在数组中填充有限数量 元素并保持数组长度 的选项。
我考虑填充到不同的 "target" 字段,以便原始回复数组保持不变(因此有关回复数量的信息)。但是我认为这个选项在mongoose populate()中不存在。
用例 可以在 Youtube 评论 上看到。评论包括回复数,但只显示有限的回复数。
我使用了以下技巧来处理这种情况。
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);
}
});
}
});
希望对您有所帮助
有了架构
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(...)
现在我看不到 在数组中填充有限数量 元素并保持数组长度 的选项。
我考虑填充到不同的 "target" 字段,以便原始回复数组保持不变(因此有关回复数量的信息)。但是我认为这个选项在mongoose populate()中不存在。
用例 可以在 Youtube 评论 上看到。评论包括回复数,但只显示有限的回复数。
我使用了以下技巧来处理这种情况。
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);
}
});
}
});
希望对您有所帮助