MongoDB - 仅获取已填充文档的数组中的第一项 - 例如user.populate('posts', 'images.0')
Posted
技术标签:
【中文标题】MongoDB - 仅获取已填充文档的数组中的第一项 - 例如user.populate(\'posts\', \'images.0\')【英文标题】:MongoDB - Only fetch the first item in an array on a populated document - e.g. user.populate('posts', 'images.0')MongoDB - 仅获取已填充文档的数组中的第一项 - 例如user.populate('posts', 'images.0') 【发布时间】:2021-07-26 01:22:21 【问题描述】:假设我正在使用 posts
字段获取用户。每个post
都有一个字段images
。我想填充用户的帖子,但只从每个帖子中获取第一张图片。我怎样才能做到这一点?我给出了以下作为不起作用的示例:
db.User.findOne().populate('posts', 'images.0')
【问题讨论】:
【参考方案1】:您可以使用$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" )
【讨论】:
以上是关于MongoDB - 仅获取已填充文档的数组中的第一项 - 例如user.populate('posts', 'images.0')的主要内容,如果未能解决你的问题,请参考以下文章