在数组中填充有限数量的项目,但保持数组长度 - mongoose
Posted
技术标签:
【中文标题】在数组中填充有限数量的项目,但保持数组长度 - mongoose【英文标题】:Populate limited number of items in array, but keep array length - mongoose 【发布时间】:2017-03-29 03:06:43 【问题描述】:使用架构
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 cmets 上看到。评论包含回复的数量,但只显示有限的回复数量。
【问题讨论】:
【参考方案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);
);
);
希望对你有帮助
【讨论】:
感谢您的快速响应。我可以看到您的解决方案是如何工作的,但我没有得到聚合工作。我发布了一个不同的 SO 问题:***.com/questions/40636434/…以上是关于在数组中填充有限数量的项目,但保持数组长度 - mongoose的主要内容,如果未能解决你的问题,请参考以下文章