【问题标题】:MongoDB aggregate returning only specific fieldsMongoDB 聚合仅返回特定字段
【发布时间】:2020-06-28 20:43:08
【问题描述】:

我有以下代码:

const profiles = await Profile.aggregate([
      {
        $lookup: {
          from: "users",
          localField: "user",
          foreignField: "_id",
          as: "user",
        },
      },
      {
        $unwind: "$user",
      },
      {
        $match: {
          "user.name": {
            $regex: q.trim(),
            $options: "i",
          },
        },
      },
      {
        $skip: req.params.page ? (req.params.page - 1) * 10 : 0,
      },
      {
        $limit: 11,
      },
      {
        $group: {
          _id: "$_id",
          skills:{skills}
          user: { name: "$name" },
          user: { avatar: "$avatar" },
        },
      },
    ]);

我只想返回特定字段,例如技能 _id 和 user.name 和 user.avatar,但这不起作用。我很确定问题出在 $group 中。我只想接收这些字段

 [
   {
     _id: 5ef78d005d23020ca847aa76,
     skills: [ 'asd' ],
     user: {
       _id: 5ef78c7c5d23020ca847aa75,
       name: 'Simeon Lazarov',
       avatar: 'uploads\\1593286096227 - background.jpg',
     }
   }
 ]

【问题讨论】:

  • 请用示例数据更新问题
  • 我编辑了我的问题以向您展示我想要得到的回报,但是通过我的查询,我得到了有关个人资料的所有信息
  • 是的,但我对聚合真的很陌生,我想我只是尝试错了

标签: mongodb aggregation-framework


【解决方案1】:

您可以使用$project 获取特定字段。

分组后添加以下内容:

{
 $project: {_id:1, skills:1, user:1}
}

投影值0表示需要排除该字段,值1表示包含该字段。

文档参考:https://docs.mongodb.com/manual/reference/operator/aggregation/project/

【讨论】:

  • 我只是删除了 $group 并且工作了!谢谢!我也可以问你 1-2 个问题吗
  • 再次感谢您!您可以在此处查看我的问题,如果需要更多信息,请在此处发表评论! here
  • 另外如何检查用户是否与查询对象具有相同的 id 以不返回它{"user._id": {$ne: req.user.id},}, 这样的东西,但这不起作用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-07
  • 2014-08-25
  • 2020-05-20
  • 1970-01-01
  • 2021-09-08
  • 2020-02-20
相关资源
最近更新 更多