pymongo-如何按最后日期为每个客户获取单个策略,并按日期对所有策略进行排序



我有两个收集

个人收集

[{'_id':1, 'name': 'aaaa'},
{'_id':2, 'name': 'bbbb'},
{'_id':3, 'name': 'cccc'}]

策略收集

[{'_id':yyyy, 'person_id':2, 'expiry_date':01-12-2017},
{'_id':yyyy, 'person_id':1, 'expiry_date':01-12-2019},
{'_id':yyyy, 'person_id':2, 'expiry_date':05-12-2020},
{'_id':yyyy, 'person_id':1, 'expiry_date':04-12-2018},
{'_id':yyyy, 'person_id':3, 'expiry_date':06-12-2017}]

结果应该是首先,它获取具有最大到期日期的策略,然后按日期排序。

[{'_id':yyyy, 'person_id':1, 'expiry_date':01-12-2019},
{'_id':yyyy, 'person_id':2, 'expiry_date':05-12-2020},
{'_id':yyyy, 'person_id':3, 'expiry_date':06-12-2017}]

将日期/时间值存储为字符串是一个设计缺陷,请始终使用正确的Date对象。转换为Date后,可以应用排序:

db.policy.aggregate([
{ $set: { expiry_date: { $dateFromString: { dateString: "$expiry_date", format: "%d-%m-%Y"} } } },
{ $sort: { expiry_date: -1} },
{ $group: { _id: "$person_id", expiry_date: { $first: "$expiry_date" } } }
])

或者你可以使用

{ $group: { _id: "$person_id", expiry_date: { $max: "$expiry_date" } } }

其不需要任何CCD_ 3

相关内容

  • 没有找到相关文章

最新更新