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')的主要内容,如果未能解决你的问题,请参考以下文章

在MongoDB中获取数组的第n个元素

在MongoDB中获取数组的第n个元素

仅获取 mongodb 集合中具有条件的第一个匹配文档

MongoDB - 仅投影数组中的匹配元素

MongoDB - 仅投影数组中的匹配元素

如何填充外部字段 ID 的 MongoDB 数组?