2017-10-19 12 views
0

MongoDB와 그 쿼리에 익숙하지 않지만, 현재 열에서 컬렉션으로 '컬럼'을 변경할 수는 없습니다.MongoDB에서 현재까지의 문자열 쉘 또는 PyMongo

내 데이터베이스와 컬렉션은 모두 thdr이라고합니다. 'PSTNG_DATE'열을 날짜 형식으로 변경하고 싶습니다. 현재 형식은 '19 .10.2017 '입니다.

MongoDB Compass

나는 여기에 스레드를 통해 가서 물건 몇 가지를 시도했지만 작동하지 않는 것 같습니다. MongoDB Shell이나 PyMongo를 사용하여 변경할 수 있음을 이해합니다.

여러분의 도움과지도에 많은 감사를드립니다.

** UPDATE ** 그게 내가 지금 가지고 있고 그것이 나에게 당신은 bulkWrite으로 그렇게 할 수

db = db.getSiblingDB('thdr'); 
var requests = []; 
db.thdr.find().forEach(doc => { 
    var date = yourFunctionThatConvertsStringToDate(doc.PSTNG_DATE); 
    requests.push({ 
     'updateOne': { 
      'filter': { '_id': doc._id }, 
      'update': { '$set': { 
       "PSTNG_DATE": date 
      } } 
     } 
    }); 
    if (requests.length === 500) { 
     db.thdr.bulkWrite(requests); 
     requests = []; 
    } 
}); 

if(requests.length > 0) { 
    db.thdr.bulkWrite(requests); 
} 
+0

https://stackoverflow.com/questions/10942931/converting-string-to-date-in-mongodb – JohnnyHK

답변

1

구문 오류 제공 내용은 다음과 같습니다

db = db.getSiblingDB('yourDatabaseName'); 
var requests = []; 
db.yourCollectionName.find().forEach(doc => { 
var strDate = doc.PSTNG_DATE; 
var dateParts = strDate.split("."); 
var date = new Date(dateParts[2], (dateParts[1] - 1), dateParts[0]); 
    requests.push({ 
     'updateOne': { 
      'filter': { '_id': doc._id }, 
      'update': { '$set': { 
       "PSTNG_DATE": date 
      } } 
     } 
    }); 
    if (requests.length === 500) { 
     db.yourCollectionName.bulkWrite(requests); 
     requests = []; 
    } 
}); 

if(requests.length > 0) { 
    db.yourCollectionName.bulkWrite(requests); 
} 

당신은해야 할 것을 각 문서를 업데이트하십시오. 따라서 각 문서에 대한 업데이트를 수행하는 대신 배열 (requests)에 배열을 추가하고 bulkWrite(...) https://docs.mongodb.com/manual/reference/method/load/에 설명 된대로 스크립트를로드하여 mongodb 서버에서 직접 실행할 수 있습니다. 희망이 도움이됩니다.

FYI : find() 내부에는 원하는 경우 실제로 쿼리를 추가 할 수 있습니다 (특히 인덱스 필드를 검색하는 경우 더욱 그렇습니다). 이렇게하면 한 번에 교체 할 문서의 양과로드를 줄일 수 있습니다.

+0

의 가능한 속임수는 db 이름을 thdr로 변경하고 스크립트를 .js 파일에 붙여넣고 load 메서드를 사용했습니다. 몽고 껍질에. 구문 오류가 발생합니다. 2017-10-19T15 : 53 : 15.917 + 0200 E QUERY [thread1] SyntaxError : 형식이 잘못된 유니 코드 문자 이스케이프 시퀀스 @ (shellhelp1) : 1 (C : \ Users \ me \ Desktop \ asd \ update2.js) : 24 error2 : SyntaxError : 형식이 잘못된 유니 코드 문자 이스케이프 시퀀스 @ (shellhelp1) : 1 : 24' –

+0

"아마도? load ("C : \ Users \ me \ Desktop \ asd \ update2.js ") –

+0

"수정 된 .js를 사용하여 게시물을 업데이트했습니다."트릭을하지 않았습니다. –