2014-04-11 6 views
0

Date의 비교 쿼리 $gt, $lt 등을 ObjectId에 반하여 수행 할 수 있습니까? mongodb 드라이버가 이것을 자동으로 캐스팅합니까? 이 mongodb 서버가 이것을 자동으로 전송합니까?비교 쿼리 연산자 ObjectId <-> 날짜

+0

질문 편집에 예제를 제공 할 수 있습니까? – Sanjeev

답변

1

예 아니요.

JavaScript 기반 메소드에서 비교를 위해 사용할 수있는 ObjectId 값에서 날짜를 가져올 수 있습니다. 특정 날짜 값도 주어진 ObjectId를 생성 할 수 있어야하지만 그 유틸리티를 보지 못합니다. 심지어 정말 크지 않은 경우 성명, 이와 같은

그래서
ObjectId("53473d87cb495e216c982929") > ObjectId("53473e57cb495e216c98292a") 

ObjectId("53473d87cb495e216c982929").getTimestamp() > 
ObjectId("53473e57cb495e216c98292a").getTimestamp() 

ObjectId("53473d87cb495e216c982929").getTimestamp() > 
ISODate("2014-04-11T00:55:35Z")  

형태가 작동합니다 : _id 년대의 "창조"에 관해서는

db.collection.find({ 
    "$where": function() { 
     return this._id.getTimestamp() > new Date("2014-01-01"); 
    } 
} 

그러나 모든 날짜별로 유효하고 essentialy 있습니다 그들은 "드라이버"에서 또는 사용자에 의해 명시 적으로 수행되거나 여전히 생략 된 경우 서버가이를 생성합니다.

+0

그래서'Date' 개체와'ObjectId' 개체를 비교할 수 없으며 그 반대의 경우도 쿼리 개체에서 직접 비교할 수 있습니까? – paulkon

+0

@paulkon 한 가지 가능한 사용 예를 추가하여이를 해결했습니다. 자바 스크립트 기반 쿼리는 성능면에서는 좋은 소식이 아니므로이 문제를 피하려면 다른 방법을 찾아야합니다. 그러나 그것은 할 수 있습니다. –

+0

나는'$ where'을 사용해야 만합니까? – paulkon