2015-01-27 5 views
1

node.js mongodb 클라이언트를 사용하고 있습니다. 컬렉션에 타임 스탬프 값이 있습니다. 이제 타임 스탬프를 IOSDate로 변환하기 위해 집계를 사용하고 싶기 때문에 쉽게 비교할 수 있습니다. 그러나 나는 그것을 어떻게하는지 모른다.mongodb 집계에서 타임 스탬프를 ISO 날짜로 변환하는 방법

var db = game.getDB(); 
    var coll = db.collection("LoginRecord"); 
    coll.aggregate([ 
     { 
      $project: { 
       "PT" : 1, 
       "PID" : 1, 
       "regDate" : new Date("$createTime"), //#####createTime is a timestamp, I want to convert it to IOSDate 
       "loginDay" : { $dayOfYear : "$_serverDate"} 
      } 
     }, 
     { 
      $group : { 
       "_id" : "$loginDay", 
       "logUsers" : { $addToSet: "$PID"} 
      } 
     }, 
     { 
      $unwind : "$logUsers" 
     }, 
     { 
      "$group" : { 
       "_id" : "$_id", 
       "logCount" : { $sum: 1} 
      } 
     } 
    ], function(err, res) { 
     logger.info("aggregate res " + JSON.stringify(res)); 
    }); 
+2

당신은 그렇게 할 수 없습니다. 사용중인 JavaScript 함수는 "외부"와 "이전"평가를 통해 파이프 라인 내용이 서버로 전송됩니다. 파이프 라인 실행 중에는 요소에 임의의 코드를 사용할 수 없습니다. "dayOfYear"를 결정하기 위해 타임 스탬프 값을 사용해야합니다 (매우 복잡하며 집계 프레임 워크에 처리하기 위해 필요한 수학 연산자가 없다는 것이 확실합니다). 그렇지 않으면 컬렉션을 대신 Date 유형을 사용하도록 변환하십시오. 그러나 파이프 라인 실행 중에는이 방법을 사용할 수 없습니다. –

+0

mongodb 클라이언트가 C++ 인 경우 시간 값이있는 json 값을 어떻게 만들 수 있습니까? json을 mongodb로 보내면 날짜 값이 자동으로 ISODate 값으로 저장됩니까? 나는 그것을 어떻게 성취 할 수 있는가? – user3172936

+0

드라이버 라이브러리에는 날짜 개체 유형이 있습니다. 그것을 사용하는 방법을 모르는 경우 다른 질문을 올리십시오. 내 설명대로 여기에서하려는 것은 불가능합니다. –

답변

0

집계 프레임 워크를 사용하기 전에 컬렉션을 쿼리하고 문서를 ISODate 날짜 형식으로 업데이트하면됩니다. Mongodb 내부 용 타임 스탬프 객체. 따라서이 유형을 ISODate로 영구 전환해야합니다. warning.

-1

에 대한 링크 MongoDB는이를 쉽게 수행 할 수있는 방법을 제공하지 않습니다.

내가 해결 한 방법 map 함수를 사용하여 날짜 필드를 결과에 삽입했습니다.

첫째, 설치 날짜 변환 기능, 아래와 같은 :

function toDateStr(ts) { 
    let dataF = new Date(); dataF.setTime(ts); 
    let strDataF = dataF.toLocaleString(); 
    return strDataF; 
} 

다음, 당신의 집계에, 단지 각 문서에이 함수를 호출하고 새로운 날짜 필드를 삽입합니다. 그래서 같이 :

db.Collection.aggregate([ 
    { 
     $project: { 
      timestamp: 1 
      } 
     }, 
     { 
      $match: { /* something */ 
      } 
     } 
    ] 
).map(function(doc) { 
    doc['date'] = toDateStr(doc.timestamp); 
    return doc 
}) 
관련 문제