首页 文章

在MongoDB中使用$ slice with $ map on $ lookup?

提问于
浏览
-1
  • 嗨,我有一个带查询的聚合查询,我需要从这个查找中投射特定的字段并对它们进行切片 . 这就是我到目前为止所做的 .
{
$lookup: {
  from: 'users',
  localField: 'users',
  foreignField: '_id',
  as: 'users',
}},

我添加了unwind语句

{
$unwind: {
  path: '$users',
  preserveNullAndEmptyArrays: true
}},

我添加了组声明

{ $group: { _id: { _id: '$_id', createdAt: '$createdAt', updatedAt: '$updatedAt' }, users: { $addToSet: '$users', } } },

并在我做的用户数组中投影特定字段:

{
$project: {
  _id: '$_id._id',
  createdAt: '$_id.createdAt',
  updatedAt: '$_id.updatedAt',
  // users: {
  //   $slice: [
  //     "$users",
  //     skip,
  //     limit
  //   ]
  // },
  users: {
    $map: {
        input: '$users',
        as: 'user',
        in: {
          email: '$$user.email',
          name: '$$user.name',
          username: '$$user.username',
          updatedAt: '$$user.updatedAt'
        }
     }
  }
}},

我的问题是,我如何在这个范围内使用$ slice?

1 回答

  • -1

    我不知道 'legit' 是怎么回事,但我已经在 $group 中添加了 $addToSet 语句的字段,所以现在我可以使用 $slicemapped fields .

    {
        $group: {
          _id: {
            _id: '$_id',
            createdAt: '$createdAt',
            updatedAt: '$updatedAt',
          },
          users: {
            $addToSet: {
              _id: '$users._id',
              email: '$users.email',
              name: '$users.name',
              username: '$users.username',
              updatedAt: '$users.updatedAt'
            }
          }
        }
      }
    

    现在我可以轻松地在 $project 声明中做 $slice .

    {
        $project: {
          _id: '$_id._id',
          users: {
            $slice: [
              "$users",
              skip,
              limit
            ]
          }
        },
      }
    

    如果有人有更好的解决方案,我想知道 .

相关问题