2016-08-16 64 views
-1

差不多我的数据看起来是这样的:MongoDB查询最新数据?

{ 
"name" : "Name1", 
"monthson" : "4", 
"data" : "OLD DATA FOR 1" 
}, 
{ 
"name" : "Name1", 
"monthson" : "5", 
"data" : "LATEST DATA FOR 1" 
}, 
{ 
"name" : "Name2", 
"monthson" : "7", 
"data" : "OLD DATA FOR 2" 
}, 
{ 
"name" : "Name2", 
"monthson" : "8", 
"data" : "LATEST DATA FOR 2" 
} 

我想每一个名字,然后将数据输出最晚想出一个办法来组的一切。 (monthson代表每个集合有多少个月是活跃的,所以最高的月份是最新的)。

我Mongo的查询看起来是这样的:

db.collection.aggregate(
     [ 
      {$match: {$in: ["name1", "name2"]}} 
      {$group: 
      { 
       _id:"$name", 
       monthson:{$max: "$monthson"}, 
       data: {$addToSet: "$data"} 
      }}, 
     ]) 

输出看起来是这样的:

{ 
_id:"Name1", 
monthson: 5, 
data: ["OLD DATA FOR 1", " LATEST DATA FOR 1"] 
} 
{ 
_id:"Name2", 
monthson: 8, 
data: ["LATEST DATA FOR 2", "OLD DATA FOR 2"] 
} 

诀窍是我每次运行此查询时它增加了每个组数据,以我的结果当我只想要与最高月份相对应的数据时。我无法查询第一个,最后一个或最高的数据,因为它们将始终以随机顺序排列。

+2

专业提示:不要求“尽快”帮助,但请[阅读本社区讨论](http://meta.stackoverflow.com/q/326569/472495)。 – halfer

回答

3

您可以使用$排序得到你想要的顺序(我用的最早的第一),然后$第一去的第一个(最早的)匹配记录每个“名”

db.collection.aggregate([ 
    { 
     $match: {name: {$in: ["Name1", "Name2"]}} 
    }, 
    { 
     $sort: {monthson:-1} 
    }, 
    { 
     $group: { 
       _id:"$name", 
       first:{$first: "$$ROOT"} 
     } 
    } 
]) 
+0

感谢您的输入!用$$ ROOT进行排序的工作,但我刚刚意识到一些记录有相同数量的monthon但不同的数据集。有没有办法在一个查询中提取最高月份的所有记录? –