포함 된 문서 배열에서 mongodb의 ISO 날짜를 'yyyy-mm-dd hh : mm : ss'로 변환하는 방법은 무엇입니까?

tysss

내 컬렉션에 '생성됨'필드가 있으며 날짜 형식은 ISO 날짜입니다. 'yyyy-mm-dd hh : mm : ss'로 변환하려면 어떻게해야합니까?

문서 샘플 :

{
    "_id" : ObjectId("432babb4d3281999g902a378"),
    "ID" : "290283667",
    "Data" : {
        "Product-2713890" : {
            "Created" : ISODate("2016-08-23T20:55:39.437Z"),
            "Product" : "Product-2713890"
        }
    }
}

예상 결과:

{
    "_id" : ObjectId("432babb4d3281999g902a378"),
    "ID" : "290283667",
    "Product" : "Product-2713890",
    "Created" : "2016-08-23 20:55:39"

}

내 코드는 다음과 같습니다.

db.getCollection('BasicInfo').aggregate([
{$match:{Type:'subscriptions'}},
{$project: {hashmaps: { $objectToArray: '$$ROOT.Data'},ID:'$$ROOT'}},
{$project: {ID:'$ID.ID',
            Product: '$hashmaps.v.Product',
            Created: '$hashmaps.v.Created'} },
{$unwind:'$Product'},
{$unwind:'$Created'}
]) 

$dateToString아래와 같이 사용하려고했지만 "BSON 유형 배열에서 날짜로 변환 할 수 없습니다"라는 오류 메시지가 나타납니다.

db.getCollection('BasicInfo').aggregate([
{$match:{Type:'subscriptions'}},
{$project: {hashmaps: { $objectToArray: '$$ROOT.Data'},ID:'$$ROOT'}},
{$project: {ID:'$ID.ID',
            Product: '$hashmaps.v.Product',
            Created: {$dateToString:{format:'%Y-%m-%d',date:'$hashmaps.v.Created'}}} },
{$unwind:'$Product'},
{$unwind:'$Created'}
])    
ambianBeing

다음 집계 쿼리는 예상 출력을 가져와야합니다.

의 도움 $addFields그 이유는 무엇입니까? 로 변환 된 샘플 문서의 값은 0 번째 인덱스에 있기 때문 입니다. 놀이터 링크$arrayElemAt Data$objectToArray

참고 :Data 필드가 둘 이상의 제품 정보를 포함 할 수 있다는 점을 고려 하면 첫 번째 요소를 선택하기 전에이 $filter문제를 올바르게 해결하기 위해 제품 키를 기반으로 해시 맵 배열을 필터링 (단방향) 해야 합니다.

db.collection.aggregate([
{$match:{Type:'subscriptions'}},
  {
    $addFields: {
      hashmaps: {
        $objectToArray: "$$ROOT.Data"
      }
    }
  },
  {
    $project: {
      "ID": 1,
      "hashmaps": {
        $arrayElemAt: [
          "$hashmaps",
          0
        ]
      }
    }
  },
  {
    $project: {
      "ID": 1,
      "Product": "$hashmaps.k",
      "Created": {
        $dateToString: {
          format: "%Y-%m-%d %H:%M:%S",
          date: "$hashmaps.v.Created"
        }
      }
    }
  }
])

++ 주석을 기반으로 업데이트 된 쿼리 : 데이터에 실제로 여러 제품이있는 경우. 사용$map

db.collection.aggregate([
  {
    $addFields: {
      productsMap: {
        $objectToArray: "$$ROOT.Data"
      }
    }
  },
  {
    $project: {
      "Products": {
        $map: {
          input: "$productsMap",
          as: "p",
          in: {
            Product: "$$p.k",
            Created: {
              $dateToString: {
                format: "%Y-%m-%d %H:%M:%S",
                date: "$$p.v.Created"
              }
            },
            ID: "$ID",
            _id: "$_id"
          }
        }
      },
      _id: 0
    }
  }
])

샘플 출력 : 새 쿼리가있는 플레이 그라운드

[
  {
    "Products": [
      {
        "Created": "2016-08-23 20:55:39",
        "ID": "290283667",
        "Product": "Product-2713890",
        "_id": ObjectId("5a934e000102030405000000")
      },
      {
        "Created": "2017-07-23 20:55:39",
        "ID": "290283667",
        "Product": "Product-6943532",
        "_id": ObjectId("5a934e000102030405000000")
      }
    ]
  }]

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관