簡體   English   中英

pymongo - 如何在最后日期之前為每個客戶獲取單一政策並按日期對所有政策進行排序?

[英]pymongo - how to get single policy for each customer by last date and sort all policy by date?

我有兩個收藏

人物集合

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

不需要任何$sort

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM