내 컬렉션에 '생성됨'필드가 있으며 날짜 형식은 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'}
])
다음 집계 쿼리는 예상 출력을 가져와야합니다.
의 도움 $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] 삭제
몇 마디 만하겠습니다