2015-05-09 53 views
0

是否可以在嵌套數組中找到最大日期並顯示其價格,然後顯示父級字段,如實際價格。mongodb聚合查找嵌套數組中的最小值和其他字段

我想讓它顯示這樣的結果是:

{ 
    "_id" : ObjectId("5547e45c97d8b2c816c994c8"), 
    "actualPrice":19500, 
    "lastModifDate" :ISODate("2015-05-04T22:53:50.583Z"), 
    "price":"16000" 
} 

數據:

db.adds.findOne() 
    { 
      "_id" : ObjectId("5547e45c97d8b2c816c994c8"), 
      "addTitle" : "Clio pack luxe", 
      "actualPrice" : 19500, 
      "fistModificationDate" : ISODate("2015-05-03T22:00:00Z"), 
      "addID" : "1746540", 
      "history" : [ 
        { 
          "price" : 18000, 
          "modifDate" : ISODate("2015-05-04T22:01:47.272Z"), 
          "_id" : ObjectId("5547ec4bfeb20b0414e8e51b") 
        }, 
        { 
          "price" : 16000, 
          "modifDate" : ISODate("2015-05-04T22:53:50.583Z"), 
          "_id" : ObjectId("5547f87e83a1dae00bc033fa") 
        }, 
        { 
          "price" : 19000, 
          "modifDate" : ISODate("2015-04-04T22:53:50.583Z"), 
          "_id" : ObjectId("5547f87e83a1dae00bc033fe") 
        } 
      ], 
      "__v" : 1 
    } 

我的查詢

db.adds.aggregate(
    [ 
    { $match:{addID:"1746540"}}, 
    { $unwind:"$history"}, 

    { $group:{ 
      _id:0, 
      lastModifDate:{$max:"$historique.modifDate"} 
     } 
    } 
]) 

我不知道如何將我使用的其他領域$項目,但我得到錯誤 感謝您的幫助

回答

2

你可以嘗試以下的聚合管道,其並不需要利用$group操作階段爲$project運營商需要的領域投影的護理:

db.adds.aggregate([ 
    { 
     "$match": {"addID": "1746540"} 
    }, 
    { 
     "$unwind": "$history" 
    },   
    { 
     "$project": { 
      "actualPrice": 1, 
      "lastModifDate": "$history.modifDate", 
      "price": "$history.price" 
     } 
    }, 
    { 
     "$sort": { "lastModifDate": -1 } 
    }, 
    { 
     "$limit": 1 
    } 
]) 

輸出

/* 1 */ 
{ 
    "result" : [ 
     { 
      "_id" : ObjectId("5547e45c97d8b2c816c994c8"), 
      "actualPrice" : 19500, 
      "lastModifDate" : ISODate("2015-05-04T22:53:50.583Z"), 
      "price" : 16000 
     } 
    ], 
    "ok" : 1 
} 
+0

是的'$ group'舞臺是不必要的 – styvane

+0

不錯$組不需要謝謝 –

相關問題