복붙노트

[MONGODB] 작동하지 않는 것 MongoDB를에 ISODate와 날짜 쿼리

MONGODB

작동하지 않는 것 MongoDB를에 ISODate와 날짜 쿼리

나는 MongoDB의에서 일할 심지어 가장 기본적인 날짜 쿼리를 얻을 수있을 것 같지 않습니다. 이 같은 형태의 문서로 :

{
    "_id" : "foobar/201310",
    "ap" : "foobar",
    "dt" : ISODate("2013-10-01T00:00:00.000Z"),
    "tl" : 375439
}

그리고 쿼리 같은 모습이 :

{ 
    "dt" : { 
        "$gte" : { 
            "$date" : "2013-10-01T00:00:00.000Z"
        }
    }
}

나는 실행에서 0 결과를 얻을 수 있습니다 :

db.mycollection.find({
  "dt" : { "$gte" : { "$date" : "2013-10-01T00:00:00.000Z"}}
})

문제가 해결되지 않는 이유 어떤 생각?

내가 궁극적으로 MongoDB를로 전송되는 쿼리를 직접 제어 할 필요가 없습니다 참고로,이 쿼리는 봄의 MongoTemplate에 의해 생산되고있다.

(추신.)

> db.version()
2.4.7

감사!

해결법

  1. ==============================

    1.$ 날짜가 MongoDB를 확장 JSON의 일부이며 그건 당신이 mongoexport 기본적으로 무엇을 얻을하지만 난 당신이 정말 쿼리의 일부로 사용할 수 있다고 생각하지 않습니다.

    $ 날짜가 MongoDB를 확장 JSON의 일부이며 그건 당신이 mongoexport 기본적으로 무엇을 얻을하지만 난 당신이 정말 쿼리의 일부로 사용할 수 있다고 생각하지 않습니다.

    시도는 정확히 다음과 같은 $ 날짜를 검색하는 경우 :

    db.foo.find({dt: {"$date": "2012-01-01T15:00:00.000Z"}})
    

    당신은 오류가 발생합니다 :

    error: { "$err" : "invalid operator: $date", "code" : 10068 }
    

    이 시도:

    db.mycollection.find({
        "dt" : {"$gte": new Date("2013-10-01T00:00:00.000Z")}
    })
    

    또는 (@ user3805045로 의견을 다음) :

    db.mycollection.find({
        "dt" : {"$gte": ISODate("2013-10-01T00:00:00.000Z")}
    })
    

    ISODate도 (@MattMolnar에 의해 언급) 시간없이 날짜를 비교해야 할 수 있습니다.

    몽고 셸의 데이터 유형에 따라 모두 동일해야 :

    및 ISODate를 사용하는 것은 여전히 ​​Date 객체를 반환해야합니다.

    { "$ 날짜": "ISO-8601 문자열은"} 엄격한 JSON 표현이 필요한 경우 사용할 수 있습니다. 한 가지 예는 하둡 커넥터이다.

  2. ==============================

    2.MongoDB의 요리 책 페이지의 댓글에서 :

    MongoDB의 요리 책 페이지의 댓글에서 :

    "dt" : 
    {
        "$gte" : ISODate("2014-07-02T00:00:00Z"), 
        "$lt" : ISODate("2014-07-03T00:00:00Z") 
    }
    

    이것은 나를 위해 일했다. 전체 맥락에서, 다음 명령은 DT 날짜 필드 2013년 10월 1일 (YYYY-MM-DD) 줄루어에 날짜가 모든 레코드를 가져옵니다

    db.mycollection.find({ "dt" : { "$gte" : ISODate("2013-10-01T00:00:00Z"), "$lt" : ISODate("2013-10-02T00:00:00Z") }})
    
  3. ==============================

    3.이 시도:

    이 시도:

    { "dt" : { "$gte" : ISODate("2013-10-01") } }
    
  4. ==============================

    4.나는 MongoDB를 클라이언트 GUI로 robomongo를 사용하고 그리고 아래 나를 위해 일한

    나는 MongoDB를 클라이언트 GUI로 robomongo를 사용하고 그리고 아래 나를 위해 일한

    db.collectionName.find({"columnWithDateTime" : {
    $lt:new ISODate("2016-02-28T00:00:00.000Z")}})
    

    응용 프로그램 측면에서 나는 기반 드라이버 MongoDB를 (v1.4.3), YYYY-MM-DD와 같은 날짜를 제공하는 UI의 응용 프로그램 사용의 날짜 선택기를 nodejs를 사용하고,이 후 주어진 다음 00:00:00 같은 기본 시간이 추가됩니다 새로운 날짜 () 생성자에 다음 기준이 오브젝트 MongoDB를 공급, 내가 드라이버 변환 ISO 날짜에 날짜와 다음 작동하고 원하는 출력을 제공하는 쿼리를 생각하지만 같은 새 Date () 생성자는하지 작업을 수행하거나 동일 보여 내 기준 개체를 확인 건너 robomongo을 사용하기 때문에, 이상한 동일한 기준에 대한 로보 몽고에 출력.

    기본 CLI의 mongoshell)는 (ISODate 새로운 일 모두 잘 작동하는 반면

  5. ==============================

    5.JSON 엄격 모드에서는 순서를 유지해야합니다 :

    JSON 엄격 모드에서는 순서를 유지해야합니다 :

    {
        "dt": {
            "$gte": {
                "$date": "2013-10-01T00:00:00.000Z"
            }
        }
    }
    

    mlab.com 내 검색 쿼리를 정의하기 위해 노력 만 것.

  6. ==============================

    6.MongoDB의 쉘에서 :

    MongoDB의 쉘에서 :

    db.getCollection('sensorevents').find({from:{$gt: new ISODate('2015-08-30 16:50:24.481Z')}})
    

    내 nodeJS 코드에서 (몽구스 사용)

        SensorEvent.Model.find( {
            from: { $gt: new Date( SensorEventListener.lastSeenSensorFrom ) }
        } )
    

    '보낸 사람'필드가 지정된 일자보다 큰 어디 반환 값에 내 센서 이벤트 수집을 조회하고

  7. ==============================

    7.이 내 문서입니다

    이 내 문서입니다

    "_id" : ObjectId("590173023c488e9a48e903d6"),
        "updatedAt" : ISODate("2017-04-27T04:26:42.709Z"),
        "createdAt" : ISODate("2017-04-27T04:26:42.709Z"),
        "flightId" : "590170f97cb84116075e2680",
    
     "_id" : ObjectId("590173023c488e9a48e903d6"),
            "updatedAt" : ISODate("2017-04-28T03:26:42.609Z"),
            "createdAt" : ISODate("2017-04-28T03:26:42.609Z"),
            "flightId" : "590170f97cb84116075e2680",
    

    지금 내가이 사용 document.so 모든 27 일 날짜를 찾으려면 ....

     > db.users.find({createdAt:{"$gte":ISODate("2017-04-27T00:00:00Z"),"$lt":ISODate("2017-04-28T00:00:00Z") }}).count()
    
    result:1
    

    이 날 위해 일했습니다.

  8. ==============================

    8.이하의 값을 검색하거나 지금보다 동일하면서 이것은 나를 위해 일한 :

    이하의 값을 검색하거나 지금보다 동일하면서 이것은 나를 위해 일한 :

    db.collectionName.find({ "dt": { "$lte" : new Date() + "" } });
    
  9. from https://stackoverflow.com/questions/19819870/date-query-with-isodate-in-mongodb-doesnt-seem-to-work by cc-by-sa and MIT license