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')

假设我正在使用 posts 字段获取用户。每个 post 都有一个字段 images。我想填充用户的 post,但只从每个 post 中获取第一张图像。我怎样才能做到这一点?我给出了以下示例,但它不起作用:

db.User.findOne().populate('posts', 'images.0')

可以使用$slice投影运算符指定数组中的元素个数为return查询结果

db.User.findOne().populate('posts', { 'images': { '$slice': 1 } })

如果你想 select 直接字符串而不是字符串数组使用 $arrayElemAt or $first 聚合运算符 从 MongoDB 4.4 开始,

  • $arrayElemAt
db.User.findOne().populate('posts', { 'images': { '$arrayElemAt': ["$images", 0] } })
  • $first
db.User.findOne().populate('posts', { 'images': { '$first': "$images" } })