问题描述
假设我正在使用 posts
字段获取用户。每个 post
都有一个字段 images
。我想填充用户的帖子,但只从每个帖子中获取第一张图片。我怎样才能做到这一点?我给出了以下作为不起作用的例子:
db.User.findOne().populate('posts','images.0')
解决方法
您可以使用 $slice 投影运算符指定要在查询结果中返回的数组中的元素数。
db.User.findOne().populate('posts',{ 'images': { '$slice': 1 } })
如果要选择直接字符串而不是字符串数组,请使用 $arrayElemAt 或 $first 聚合运算符从 MongoDB 4.4 开始,
$arrayElemAt
db.User.findOne().populate('posts',{ 'images': { '$arrayElemAt': ["$images",0] } })
$first
db.User.findOne().populate('posts',{ 'images': { '$first': "$images" } })