복붙노트

[MONGODB] MongoDB를 / 몽구스 특정 날짜에 쿼리?

MONGODB

MongoDB를 / 몽구스 특정 날짜에 쿼리?

그것은 특정 날짜를 조회 할 수 있습니까?

나는 우리가 날짜 범위에 대한 범위 쿼리을 위해 할 수있는 몽고 요리 책에서 발견 그와 마찬가지로 :

db.posts.find({"created_on": {"$gte": start, "$lt": end}})

그러나 특정 날짜 수 있습니까? 이 작동하지 않습니다

db.posts.find({"created_on": new Date(2012, 7, 14) })

해결법

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

    1.당신은 DB에 저장된 날짜 시간없이 (단지 년, 월, 일) 경우 그 작동합니다.

    당신은 DB에 저장된 날짜 시간없이 (단지 년, 월, 일) 경우 그 작동합니다.

    기회는 저장 한 날짜의 시간 구성 요소가 포함되어 새 Date ()이라고한다. 당신은 하루의 모든 순간을 포함하는 날짜 범위를 작성해야 그 시간을 조회하려면.

    db.posts.find( //query today up to tonight
      {"created_on": {"$gte": new Date(2012, 7, 14), "$lt": new Date(2012, 7, 15)}})
    
  2. ==============================

    2.

    const moment = require('moment')
    
    const today = moment().startOf('day')
    
    MyModel.find({
      createdAt: {
        $gte: today.toDate(),
        $lte: moment(today).endOf('day').toDate()
      }
    })
    

    중요 : 모든 순간이 변경할 수 있습니다!

    내일 = 넣자 (1, '일') 또한 변이 오늘부터 작동하지 않습니다. 호출 순간 (오늘)로 해결할 수있는 문제가 암시 오늘 복제에 의해 문제.

  3. ==============================

    3.단지 날짜 값과 비교하는 작업을하지 않도록 그래, Date 객체는 날짜와 시간을 complects.

    단지 날짜 값과 비교하는 작업을하지 않도록 그래, Date 객체는 날짜와 시간을 complects.

    당신은 단순히 작업자가 자바 스크립트 부울 표현식 더 복잡한 조건을 표현하는 $를 사용할 수 있습니다 :

    db.posts.find({ '$where': 'this.created_on.toJSON().slice(0, 10) == "2012-07-14"' })
    

    created_on는 날짜 필드와 2012년 7월 14일는 지정된 날짜입니다.

    날짜는 YYYY-MM-DD 형식으로 정확히해야한다.

    참고 : 드물게, 그것은 성능에 영향을 가지고 어디에 사용이 $.

  4. ==============================

    4.당신이 시도 유무 :

    당신이 시도 유무 :

    db.posts.find({"created_on": {"$gte": new Date(2012, 7, 14), "$lt": new Date(2012, 7, 15)}})
    

    당신이로 실행하는거야 문제는 날짜가 몽고에서 타임 스탬프로 저장되어 있다는 점이다. 그래서, 당신은 타임 스탬프를 일치하도록 요구하고 날짜하였습니다. 귀하의 경우에는 당신이 (특정 일 23:59에 예. 0시에서) 하루에 일치하려는 생각합니다. 날짜는 시간없이 저장되어있는 경우에 당신은 괜찮을 것 같네요. 그렇지 않으면, 같은 날 시간의 범위로 날짜를 지정하십시오 (예 = 00 시작합니다. 00, 끝 = 23 : 59) GTE 일을하지 않는 경우.

    비슷한 질문

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

    5.당신은 특정 일의 결과를 얻기 위해 API 방법에 대한 다음과 같은 방법을 사용할 수 있습니다 :

    당신은 특정 일의 결과를 얻기 위해 API 방법에 대한 다음과 같은 방법을 사용할 수 있습니다 :

    # [HTTP GET]
    getMeals: (req, res) ->
      options = {}
      # eg. api/v1/meals?date=Tue+Jan+13+2015+00%3A00%3A00+GMT%2B0100+(CET)
      if req.query.date?
        date = new Date req.query.date
        date.setHours 0, 0, 0, 0
        endDate = new Date date
        endDate.setHours 23, 59, 59, 59
        options.date =
          $lt: endDate
          $gte: date
    
      Meal.find options, (err, meals) ->
          if err or not meals
            handleError err, meals, res
          else
            res.json createJSON meals, null, 'meals'
    
  6. ==============================

    6.우리는 내가 우리가 참조 할 수 있도록 문제를 해결하는 방법을 추가 할 줄 알았는데 1을 의미 한 곳 날짜 필드는 여러 값을 갖는 우리의 데이터베이스에 중복 데이터와 관련된 문제를 가지고 있었다.

    우리는 내가 우리가 참조 할 수 있도록 문제를 해결하는 방법을 추가 할 줄 알았는데 1을 의미 한 곳 날짜 필드는 여러 값을 갖는 우리의 데이터베이스에 중복 데이터와 관련된 문제를 가지고 있었다.

    우리는 숫자 "값"필드와 날짜 "날짜"필드 "데이터"라는 컬렉션이 있습니다. 우리는 우리가 생각 나무 등이었다 과정을했지만, 두 번째 실행에 하루에 2 개 값을 추가 결국 :

    { "_id" : "1", "type":"x", "value":1.23, date : ISODate("2013-05-21T08:00:00Z")}
    { "_id" : "2", "type":"x", "value":1.23, date : ISODate("2013-05-21T17:00:00Z")}
    

    우리는 그래서 DB를 정리하기 위해 자바 스크립트 리조트했다, 2 개 개의 기록의 1이 필요합니다. 우리의 초기 접근 방식은 결과를 통해 반복 될 시부 터 오전 6 오전 11시 사이의 시간 (모든 중복 아침에 있었다) 어떤 필드를 제거하려고하지만, 구현시, 변경되었다. 여기를 해결하는 데 사용되는 스크립트입니다 :

    var data = db.data.find({"type" : "x"})
    var found = [];
    while (data.hasNext()){
        var datum = data.next();
        var rdate = datum.date;
        // instead of the next set of conditions, we could have just used rdate.getHour() and checked if it was in the morning, but this approach was slightly better...
        if (typeof found[rdate.getDate()+"-"+rdate.getMonth() + "-" + rdate.getFullYear()] !== "undefined") {
           if (datum.value != found[rdate.getDate()+"-"+rdate.getMonth() + "-" + rdate.getFullYear()]) {
               print("DISCREPENCY!!!: " + datum._id + " for date " + datum.date);
           }
           else {
               print("Removing " + datum._id);
               db.data.remove({ "_id": datum._id});
           }
        }
        else {
           found[rdate.getDate()+"-"+rdate.getMonth() + "-" + rdate.getFullYear()] = datum.value;
        }
    }
    

    다음 몽고 thedatabase fixer_script.js 그것을 실행

  7. from https://stackoverflow.com/questions/11973304/mongodb-mongoose-querying-at-a-specific-date by cc-by-sa and MIT license