我怎么能修改返回的记录格式

时间:2016-02-27 02:57:04

标签: mongodb aggregation-framework

我在聚合后得到了profile字段的嵌套结构,

我想展平个人资料结构,只保留名称字段。

我怎么能在聚合中做到这一点。

我的聚合查询与此类似

  db.hitting_stats.aggregate(
    [
      {$lookup: {
          from: 'players', 
          localField: 'name', 
          foreignField: 'name',
          as: 'profile'
        }
      }
    ]
  );

加入聚合后的记录格式

 {"_id"=>BSON::ObjectId('566d93bb5e428410e5a3354c'),
  "author_id"=>113536670874,
  ...
  "created_time"=>"2015-11-27T09:17:07+0000",
  "profile"=>{"_id"=>BSON::ObjectId('566d93695e428410e5a33224'), "name"=>"DJ"}}

预期格式

 {"_id"=>BSON::ObjectId('566d93bb5e428410e5a3354c'),
  "author_id"=>113536670874,
  ...
  "created_time"=>"2015-11-27T09:17:07+0000",
  "name"=>"DJ"
 }

1 个答案:

答案 0 :(得分:0)

尝试使用$project执行此操作,在$lookup

之后添加。{p>
{$lookup: {
          from: 'players', 
          localField: 'name', 
          foreignField: 'name',
          as: 'profile'
        }
      },
{$project: {
           _id: '$_id', 
           author_id: 1, 
           created_time: 1, 
           name: '$profile.name'
         }
      }

正如布莱克斯在评论中指出的那样,输出$loopup是'数组',更确切地说是

"name": { 
     "$arrayElemAt": [
              { "$map": { 
                   "input": "$profile", 
                   "as": "el", 
                   "in": "$$el.name" 
                   }},0]
         }