2016-08-16 85 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

相关问题