2016-10-23 6 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) 
} 

私はmistakesが最小と私はので、$グループにdateのための最後の$、$まず、$最高を$分を使用することはできません対応date

あるbadgeIdでグループ化された書類が必要mistakesが最も低い行からdateが必要です。

私は$minを使用しています次のクエリを試してみましたが、それはあなたがmistakesで結果をソートし、次にかかる場合がありますdate

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

答えて

0

の$分をピックアップしますと、それは意図した結果が得られません。対応mistakes$first

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

] 
0

dateは、私はあなたのクエリが正しいと思うが、あなたが見るように日付がここ無効です。

ISODate( "2016-14-22T21:41.382 + 0000:26")ISODate両方の日付で( "2016-13-22T21:26 + 0000 40.382")

ます月は13と14ですが、これは有効な月ではありません。以下はmongodbを入れた後の正しいデータです。

クエリ

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

を適用すると、私は以下の結果を得た

{ 
    "_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 
} 

{ 
    "_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

それは問題ありませんが、それは仕事です。私のデモのようにうまくいきます。データの検索に懸念や問題がある場合は、データを投稿してください。 –