2016-10-23 135 views
0

我有看起來像這樣的數據。聚合查詢返回其他字段

{ 
    "badgeId" : "ventura", 
    "date" : ISODate("2016-12-22T21:26:40.382+0000"), 
    "mistakes" : NumberInt(10) 
} 
{ 
    "_id" : "a4usNGibIu", 
    "badgeId" : "dog", 
    "date" : ISODate("2016-12-21T21:26:40.382+0000"), 
    "mistakes" : NumberInt(10) 
} 
{ 
    "_id" : ObjectId("580c77801d7723f3f7fe0e77"), 
    "badgeId" : "dog", 
    "date" : ISODate("2016-11-24T21:26:41.382+0000"), 
    "mistakes" : NumberInt(5) 
} 

我需要badgeId分組的文件,其中mistakes最小和相應的date

我不能用$分鐘,$最大,$第一,$倒數第一的date在$組,因爲我需要mistakes最低的行中的date

我嘗試下面的查詢在那裏我使用$min,但它不會給預期的結果,因爲它會挑的date

db.Badges.aggregate([ 
    { 
    $match: otherMatchConditions 
    }, 
    { 
    $group: { 
     _id: '$badgeId', 
     date: { 
     $min: '$date' 
     }, 
     mistakes: { 
     $min: '$mistakes' 
     } 
    } 
    } 
]) 

回答

0

分鐘$您可以通過mistakes對結果進行排序,然後取的mistakes相應$firstdate

[ 
    {$sort: {mistakes: 1}}, 
    { 
    $group: { 
     _id: '$badgeId', 
     date: { 
     $first: '$date' 
     }, 
     mistakes: { 
     $first: '$mistakes' 
     } 
    } 
    } 

] 
0

我覺得您的查詢是正確的,但正如你看到的日期是無效的位置。

ISODate( 「2016-14-22T21:26:41.382 + 0000」)ISODate( 「2016-13-22T21:26:40.382 + 0000」)

在這兩個日期

你可以看到月份是13和14,這是不合法的月份。在輸入mongodb後,下面是正確的數據。

{ 
    "_id" : ObjectId("580ca86c9a43fad551ba801f"), 
    "badgeId" : "ventura", 
    "date" : ISODate("2016-12-22T21:26:40.382Z"), 
    "mistakes" : 10 
    } 
    { 
    "_id" : "a4usNGibIu", 
    "badgeId" : "dog", 
    "date" : ISODate("2016-12-23T21:26:40.382Z"), 
    "mistakes" : 10 
    } 
    { 
    "_id" : ObjectId("580c77801d7723f3f7fe0e77"), 
    "badgeId" : "dog", 
    "date" : ISODate("2016-12-24T21:26:40.382Z"), 
    "mistakes" : 5 
} 

當應用查詢

db.getCollection('COLLECTION_NAME').aggregate([ 
    { 
    $group: { 
     _id: '$badgeId', 
     date: { 
     $min: '$date' 
     }, 
     mistakes: { 
     $min: '$mistakes' 
     } 
    } 
    } 
]) 

我得到了如下的結果。

{ 
    "_id" : "dog", 
    "date" : ISODate("2016-12-23T21:26:40.382Z"), 
    "mistakes" : 5 
} 
{ 
    "_id" : "ventura", 
    "date" : ISODate("2016-12-22T21:26:40.382Z"), 
    "mistakes" : 10 
} 
+0

對不起,這是針對該問題的手工代碼示例。 –

+0

這很好,但它的工作。就像在我的演示中一樣,它運行良好。如果您對查找數據有任何疑慮或問題,請發佈您的數據,以便我可以幫助您。 –

相關問題