2013-05-07 20 views
7

Aggregation Framework Examples,有第一&最后一个例子:我可以在MongoDB聚合查询中获得第一个文档(不是字段)吗?

db.zipcodes.aggregate({ $group: 
         { _id: { state: "$state", city: "$city" }, 
          pop: { $sum: "$pop" } } }, 
         { $sort: { pop: 1 } }, 
         { $group: 
         { _id : "$_id.state", 
          biggestCity: { $last: "$_id.city" }, 
          biggestPop: { $last: "$pop" }, 
          smallestCity: { $first: "$_id.city" }, 
          smallestPop: { $first: "$pop" } } } 

我能得到充分的邮编与$first文件?

编辑:

为了澄清,我用的CoffeeScript在我的快递应用程序做以下的事情,似乎愚蠢:

@aggregate(
    { 
    $group : 
     _id : "$category" 
     cnt : { $sum : 1 } 
     id: {$first: "$_id"} 
     name: {$first: "$name"} 
     description: {$first: "$description"} 
     region: {$first: "$region"} 
     startedAt: {$first: "$startedAt"} 
     titleImage: {$first: "$titleImage"} 
     tags: {$first: "$tags"} 
    }, 
    {$sort :{"createdAt" : -1}} 

字段(ID,姓名,......标签)都是文档模式的字段。 我只想知道,是否有任何方法可以在单个$first中执行此操作。

+0

你究竟想要什么?是排序和$第一/ $最后应该让你最小和最大人口城市? – 2013-05-07 07:22:34

+0

感谢您的回复,我只是改变了问题以澄清我想要做的事情。 – wuhaixing 2013-05-07 10:17:58

+0

现在还没有办法做到这一点 - 我认为有这个功能的杰拉票,但我找不到它。 – 2013-05-07 18:23:43

回答

10

现在可以在2.6中使用了,因为您可以使用$$ ROOT访问正在处理的文档。像这样的东西应该工作:

@aggregate(
{ 
    $group : 
     _id : "$category" 
     cnt : { $sum : 1 } 
     first: {$first : "$$ROOT"} 
{$sort :{"createdAt" : -1}} 
) 
+0

正是我之后 – 2016-12-07 18:01:20

相关问题