ドキュメントサーバー側で2つの日付の差を計算し、クエリを実行することはできますか?(SQLのDATEDIFF
関数のように)
私がこのようなドキュメントをたくさん持っていると仮定します:
>>> db.collection.find()
[
{ "id" : ObjectId("1"),
"starttime" : ISODate("2011-12-01T05:01:00"), # 5:01 AM
"endtime" : ISODate("2011-12-01T05:02:00") # 5:02 AM
},
{ "id" : ObjectId("2"),
"starttime" : ISODate("2011-12-01T06:01:00"), # 6:01:00 AM
"endtime" : ISODate("2011-12-01T06:01:30") # 6:01:30 AM
}
]
これに似た何かを達成する方法はありますか?
時差だけを返す:
>>> db.collection.date_difference_seconds(endtime, starttime)
[60, 30]
またはクエリ:
>>> db.collection.find("timediff(endtime-starttime) < 40 seconds")
[
{ "id" : ObjectId("2"), ...} # Just second document (30s diff)
]
サーバーサイドのJSとについて読んだことがありますeval()
が、ドキュメントにはこれらは推奨されていないと書かれています-それらは最良のオプションですか?
(明らかに時間差を秒単位で追加フィールド("time_diff": 30
)として追加したり、Pythonクライアント側で差を計算したりできますが、サーバー側で可能かどうかを知りたいです)
クライアント側の計算:
>>> for doc in (collection.find(None, {'starttime': 1, 'endtime': 1 }))
doc['endtime']-doc['startime']
0:01:00.000000
0:00:30.000000