我正在嘗試計算 MongoDB 物件和今天日期之間的年數差異。MongoDB 物件如下所示:
Key: Value
club_joined: 2021-08-10T00:00:00.000 00:00
我有 python 代碼(有效):
loyal_players = []
for player in players.find():
# get time players have been at club
current_date = datetime.today()
joined_club = player['club_joined']
time_at_club = relativedelta(current_date, joined_club)
time_at_club_years = time_at_club.years
# check if they are over 10 years
if time_at_club_years >= 10:
loyal_players.append(player['short_name'])
但我想要的是一個可以添加到.find()行中的 Mongo 查詢:
for player in players.find():
我知道它背后的邏輯是:
for player in players.find(
where (
(todayDate - player['club_joined']) > 10
):
但是如何在 python 中將其撰寫為 MongoDB 查詢?
MongoDb 型別:

uj5u.com熱心網友回復:
該$subtract函式將采用 2 個日期并以毫秒為單位回傳差異,因此這有效:
from pymongo import MongoClient
import datetime
now = datetime.datetime.now()
TARG = 86400 * 1000 * 365 * 10 # secs in day X millis X 365 days X 10 yrs
cursor = db.foo.aggregate([
{"$match": {"$expr": {"$gt": [ {"$subtract": [now,"$club_joined"]}, TARG ] } }}
])
for doc in cursor:
print(doc)
uj5u.com熱心網友回復:
使用relativedelta似乎更簡單:
import datetime
from dateutil.relativedelta import relativedelta
dt = datetime.datetime.now() - relativedelta(years=10)
cursor = db.foo.find({'club_joined': {'$lt': dt}})
for doc in cursor:
print(doc)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/380973.html
