서버 쪽 문서에서 두 날짜 간의 차이를 계산하고 쿼리 할 수 있습니까?각 문서의 ISODate의 차이점은 무엇입니까?
>>> 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
}
]
이 비슷한을 달성 할 수있는 방법이 있나요 : (같이 SQL의 DATEDIFF
기능)
>>> 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)
]
나는 약 server-side JS 및 eval()
읽었습니다,하지만 문서는 이러한 권장하지 않습니다 말한다 - 그들은 최선의 선택이다 ?
는 를 (I 분명히 추가 필드 (
"time_diff": 30
)로 초 단위의 시간 차이를 추가하거나 파이썬 클라이언트 측의 차이를 계산하지만, 나는 그것이 가능한 서버 측 있는지 알고 싶습니다 수 있습니다)
클라이언트 측 CALC는 :
Sammaye에 의해 제안>>> for doc in (collection.find(None, {'starttime': 1, 'endtime': 1 }))
doc['endtime']-doc['startime']
0:01:00.000000
0:00:30.000000
나는 이것을하기 위해 당신이 질문하고 싶은 시간차를 알아야한다고 생각하니? 그렇다면 다른 날짜로 쿼리하고 클라이언트 측의 차이점을 계산하지 않는 이유는 무엇입니까? – Sammaye
@Sammaye 나는 잘 모르겠다. 나는 날짜 들간의 차이에만 관심이 있고, 날짜 자체에는 관심이 없다. 내 질문에 추가 한 스 니펫과 같은 것을 의미합니까? –
서버 측에서 특별한 방법이 있다고는 생각하지 않지만 클라이언트 쪽에서는 하나의 명령문으로 수행 할 수 있습니다. map (lambda x : (x [ 'endtime'] - x [ 'starttime']). total_seconds(), db.collection.find()) –