2016-08-16 86 views
0

假設我有一個集合,名爲phone_audit,其中包含以下格式的文檔條目 - _id這是電話號碼,value包含的項目始終包含2個條目(ID和日期)。Mongo DB - 如何根據字段數組中的最舊日期查詢ID

請參閱以下內容:

{ 
     "_id" : { 
      "phone_number" : "" 
     }, 
     "value" : { 
      "items" : [ 
       { 
        "_id" : "c14b4ac1db691680a3fb65320fba7261", 
        "updated_at" : ISODate("2016-03-14T12:35:06.533Z") 
       }, 
       { 
        "_id" : "986b58e55f8606270f8a43cd7f32392b", 
        "updated_at" : ISODate("2016-07-23T11:17:53.552Z") 
       } 
      ] 
     } 
}, 
...... 

我需要得到_id值的列表,該集合中表示每個文檔中的兩個項目上了年紀的每個條目。

所以在上面的 - 結果將是[c14b4ac1db691680a3fb65320fba7261,...]

在查詢執行將v.helpful即使確切的語法是不正確的類型任何指針。

回答

2

隨着骨料(),你可以$放鬆 value.items,$排序通過update_at,然後使用$第一得到最古老的:

[ 
{ 
    "$unwind": "$value.items" 
}, 
{ 
    "$sort": { "value.items.updated_at": 1 } 
}, 
{ 
    "$group":{ 
     _id: "$_id.phone_number", 
     oldest:{$first:"$value.items"} 
    } 
}, 
{ 
    "$project":{ 
     value_id: "$oldest._id" 
    } 
} 
] 
+0

這看起來令人鼓舞,但沒有按不幸的是,工作。結果包含最老和最新的混合物。它似乎只是將value.items的第一個條目視爲從未首先排序。 – arcseldon

+0

見修訂。我錯誤地使用了「value.updated_at」而不是「value.items.updated_at」作爲$ sort – Wake

+0

謝謝,這個按預期工作 – arcseldon

相關問題