복붙노트

[MONGODB] MongoDB를하고 Nodejs으로 삽입 및 쿼리 날짜

MONGODB

MongoDB를하고 Nodejs으로 삽입 및 쿼리 날짜

나는 MongoDB를하고 nodejs에서 날짜별로 기록을 찾는 데 도움이 필요합니다.

다음과 같이 내가 긁어 스크립트에서 JSON 객체에 날짜를 추가 :

jsonObj.last_updated = new Date();

이 개체는 MongoDB를 삽입됩니다. 다음과 같이 나는 그것을 볼 수 있습니다 :

 "last_updated" : "2014-01-22T14:56:59.301Z"

그럼 내 nodejs 스크립트에서 나는) (A findOne을 수행합니다

 var jObj = JSON.parse(line.toString());

 collection.findOne(jObj,function(err, doc) {
   if (doc){
     console.log(doc._id);
   } else  {
     console.log('not found');
   }
 });

개체를 찾을 수 없습니다. 나는 개체에서 LAST_UPDATED 필드를 제거하면이 문제가 어디에 확실히 그래서 발견된다.

I 필드를 분리하면 다음과 같습니다 :

collection.findOne({last_updated: '2014-01-22T14:56:59.301Z'},function(err, doc) {
  if (doc){
    console.log(doc._id);
  } else  {
    console.log('not found');
  }
});

아무것도 중 하나를 다시 온다. 어떻게 내가 잘못 제발 뭐하는 거지?

해결법

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

    1.당신은 날짜 객체가 아닌 날짜 문자열을 전달해야합니다.

    당신은 날짜 객체가 아닌 날짜 문자열을 전달해야합니다.

    collection.findOne({last_updated: new Date('2014-01-22T14:56:59.301Z')},function(err, doc) {
    

    MongoDB의 드라이버는 ISODate로 변환합니다 :

    { 
       "_id" : ObjectId("52dfe0c469631792dba51770"), 
       "last_updated" : ISODate('2014-01-22T14:56:59.301Z') 
    }
    

    이러한 질문을 확인 :

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

    2.명확합니다. 알고 중요한 것은 즉 :

    명확합니다. 알고 중요한 것은 즉 :

    여기에 우리가 몽고가 제대로 처리 할 수 ​​있도록 날짜 조작의 작은 비트를 할 코드의 작업 조각입니다. 이 예제에서는 몽구스 모듈을 사용하여 날짜 속성보다 작은 행에 대한 결과 싶어하고 (즉. 전) MyDate가 PARAM로 주어진 날짜를.

    var inputDate = new Date(myDate.toISOString());
    MyModel.find({
        'date': { $lte: inputDate }
    })
    
  3. ==============================

    3.나는 최근에 같은 문제로 실행하고 나는 몇 가지 추가 정보를 추가하고 싶었다.

    나는 최근에 같은 문제로 실행하고 나는 몇 가지 추가 정보를 추가하고 싶었다.

    두 가지 방법으로 날짜를 삽입 할 수 있습니다 :

    예 : 새로운 객체와 시간 삽입을 스탬프

    db.collection('mycollection').findOneAndUpdate({'name': req.body.name}, {
      // only "update" if it's an insert, meaning name is not found
      $setOnInsert: {
        'name': req.body.name,
        'date_added': new Date()
      }
    }, { 
      upsert: true
    }, (err, result) => {
      if(err) return res.send(err);
      res.send(result);
    });
    

    예:

    // Send POST Request here
    fetch('addDate', {
      method: 'post',
      headers: {'Content-Type': 'application/json'},
      body: JSON.stringify({
        'date_added':  new Date()
      })
    })
    

    1.과 2.를 들어 당신은을 사용하여 날짜를 만들 상기 응답에 설명 된대로 새로운 기능 일 ( '59.301Z 2014-01-22T14 : 56'). MongoDB의 차이는 다음을 사용하여 서버 측에서 1과 그것을 할 경우 MongoClient이가 ISODate ( ': 56 59.301Z 2014-01-22T14')로 저장됩니다 패키지이다. '2014-01-22T14를 : 56 : 59.301Z'당신은 문자열로 저장됩니다 클라이언트 측에서 2와 그것을 할 경우 MongoDB를한다.

    ( ': 56 : 59.301Z 2014-01-22T14') 또는 ISODate ( '59.301Z 2014-01-22T14 : 56')에 ISODate 새로운 날짜를 사용할 필요가 오브젝트를 조회하려면 당신은 그냥 문자열을 사용하는 문자열을 조회하려면 '2014-01-22T14 : 56 : 59.301Z를'

    여기에 몽고 쉘을 사용하여 일부 쿼리 샘플은 다음과 같습니다 :

    문자열로 저장 날짜 :

    db.mycollection.findOne({date_added {$gte:'2018-06-22T00:07:53.688Z'}})
    

    이 반환

    {
      "_id" : ObjectId("5b2c3dd90078ce3cd484ef21"),
      "name" : "alfons",
      "date_added" : "2018-06-22T00:07:53.688Z"
    }
    

    ISODate로 저장 날짜 :

    db.mycollection.findOne({date_added: {$lte: ISODate('2018-06-26T23:24:37.023Z')}})
    

    또는 그 대신 "새 날짜"를 사용하여 :

    db.mycollection.findOne({date_added: {$lte: new Date('2018-06-26T23:24:37.023Z')}
    

    이 반환 :

    {
      "_id" : ObjectId("5b2bb21e1954b104e61ff735"),
      "name" : "ceasar",
      "date_added" : ISODate("2018-06-21T14:11:41.323Z")
    }
    
  4. ==============================

    4.) (Date.now에 스키마과 가치에 기본 키를 추가

    ) (Date.now에 스키마과 가치에 기본 키를 추가

  5. from https://stackoverflow.com/questions/21286599/inserting-and-querying-date-with-mongodb-and-nodejs by cc-by-sa and MIT license