[MONGODB] MongoDB의 날짜를 문자열로 변환
MONGODBMongoDB의 날짜를 문자열로 변환
MongoDB의 쉘을 사용하여 사용자 정의 형식을 사용하여 날짜 문자열을 변환하는 방법이 있나요
지금까지 나는 "33 -0400 : 16 : 35 21 / 월 / 2012"으로 변환하는 것을 시도하고있다
에 DateFormatter 또는 무언가를 전달하는 방법이 있나요 다음 Date.parse (...) 또는 ISODate (...) 방법은?
해결법
-
==============================
1.당신은 라비 Khakhkhar에서 제공하는 두 번째 링크에서 자바 스크립트를 사용하거나 당신이 (원래 형식으로 특수 문자 중 일부는 올바른 분리 문자로 인식되지 않습니다으로) 당신의 orginal 한 문자열을 변환하는 몇 가지 문자열 조작을 수행해야 할 것되지만 당신이 그렇게하면, 당신이 사용할 수있는 "새로운"
당신은 라비 Khakhkhar에서 제공하는 두 번째 링크에서 자바 스크립트를 사용하거나 당신이 (원래 형식으로 특수 문자 중 일부는 올바른 분리 문자로 인식되지 않습니다으로) 당신의 orginal 한 문자열을 변환하는 몇 가지 문자열 조작을 수행해야 할 것되지만 당신이 그렇게하면, 당신이 사용할 수있는 "새로운"
training:PRIMARY> Date() Fri Jun 08 2012 13:53:03 GMT+0100 (IST) training:PRIMARY> new Date() ISODate("2012-06-08T12:53:06.831Z") training:PRIMARY> var start = new Date("21/May/2012:16:35:33 -0400") => doesn't work training:PRIMARY> start ISODate("0NaN-NaN-NaNTNaN:NaN:NaNZ") training:PRIMARY> var start = new Date("21 May 2012:16:35:33 -0400") => doesn't work training:PRIMARY> start ISODate("0NaN-NaN-NaNTNaN:NaN:NaNZ") training:PRIMARY> var start = new Date("21 May 2012 16:35:33 -0400") => works training:PRIMARY> start ISODate("2012-05-21T20:35:33Z")
여기합니다 (몽고 쉘 내에서 데이터에 대한 수정) 유용 할 몇 가지 링크입니다 -
http://cookbook.mongodb.org/patterns/date_range/
http://www.mongodb.org/display/DOCS/Dates
http://www.mongodb.org/display/DOCS/Overview+-+The+MongoDB+Interactive+Shell
-
==============================
2.내 경우에는 내가 문자열에서 날짜 형식으로 클럭 타임 모음에서 필드 ClockInTime를 변환하기위한 다음과 같은 솔루션으로 성공했다 :
내 경우에는 내가 문자열에서 날짜 형식으로 클럭 타임 모음에서 필드 ClockInTime를 변환하기위한 다음과 같은 솔루션으로 성공했다 :
db.ClockTime.find().forEach(function(doc) { doc.ClockInTime=new Date(doc.ClockInTime); db.ClockTime.save(doc); })
-
==============================
3.MongoDB를 4.0 및 최신 사용
MongoDB를 4.0 및 최신 사용
은 $ TODATE 연산자는 날짜 값을 변환합니다. 값은 날짜, $ TODATE 오류로 변환 할 수없는 경우. 값이 null 또는 누락 된 경우, $ TODATE 반환 널 (null) :
다음과 같이 집계 파이프 라인 내에서 사용할 수 있습니다 :
db.collection.aggregate([ { "$addFields": { "created_at": { "$toDate": "$created_at" } } } ])
위는 다음과 같이 $ 변환 연산자를 사용하는 것과 같습니다 :
db.collection.aggregate([ { "$addFields": { "created_at": { "$convert": { "input": "$created_at", "to": "date" } } } } ])
MongoDB를 3.6 및 최신 사용
또한 날짜 객체에 날짜 / 시간 문자열로 변환 잘 시간대로 날짜 형식을 지정하는 옵션이있는 $의 dateFromString 연산자를 사용 CAB :
db.collection.aggregate([ { "$addFields": { "created_at": { "$dateFromString": { "dateString": "$created_at", "format": "%m-%d-%Y" /* <-- option available only in version 4.0. and newer */ } } } } ])
사용하여 MongoDB 버전> = 2.6 <3.2
MongoDB의 버전은 변환을 기본 운영자가없는 경우) (foreach 문을 사용 중 하나에 의해 반복 처리를 찾기 () 메소드에 의해 반환되는 커서를 수동으로하는 방법을 필요 또는 커서 방법은 다음 () 문서에 액세스 할 수 있습니다. 루프를 withing에, ISODate 객체에 필드를 변환 한 다음 필드 created_at라고 다음 예와 같이 $ 집합 연산자를 사용하여 필드를 업데이트하고 현재 문자열 형식으로 날짜가 원하는 분야
var cursor = db.collection.find({"created_at": {"$exists": true, "$type": 2 }}); while (cursor.hasNext()) { var doc = cursor.next(); db.collection.update( {"_id" : doc._id}, {"$set" : {"created_at" : new ISODate(doc.created_at)}} ) };
성능 향상을 위해 특히 당신이 당신에게 당신이에 대한 모든 요청을 전송하지 않는 한 더 나은 성능을 제공합니다 말 1000 일괄 서버로 작업을 보내는 것 같은 대량 업데이트를 대량 API를 사용하여 활용, 대규모 컬렉션을 처리 할 때 서버, 단지마다 1,000 요청한다.
다음은 첫 번째 예 MongoDB의 버전> = 2.6 <3.2 사용할 벌크 API를 사용하여 이러한 접근법을 보여준다. 그것은 모든 업데이트 날짜 필드에 created_at 필드를 변경하여 컬렉션의 문서 :
var bulk = db.collection.initializeUnorderedBulkOp(), counter = 0; db.collection.find({"created_at": {"$exists": true, "$type": 2 }}).forEach(function (doc) { var newDate = new ISODate(doc.created_at); bulk.find({ "_id": doc._id }).updateOne({ "$set": { "created_at": newDate} }); counter++; if (counter % 1000 == 0) { bulk.execute(); // Execute per 1000 operations and re-initialize every 1000 update statements bulk = db.collection.initializeUnorderedBulkOp(); } }) // Clean up remaining operations in queue if (counter % 1000 != 0) { bulk.execute(); }
MongoDB를 3.2을 사용하여
다음 예제는 이후 bulkWrite ()를 사용하는 API의 새로운 세트를 대량 API를 사용되지 않으며 제공 한 새로운 MongoDB를 버전 3.2에 적용
var bulkOps = [], cursor = db.collection.find({"created_at": {"$exists": true, "$type": 2 }}); cursor.forEach(function (doc) { var newDate = new ISODate(doc.created_at); bulkOps.push( { "updateOne": { "filter": { "_id": doc._id } , "update": { "$set": { "created_at": newDate } } } } ); if (bulkOps.length === 500) { db.collection.bulkWrite(bulkOps); bulkOps = []; } }); if (bulkOps.length > 0) db.collection.bulkWrite(bulkOps);
-
==============================
4.나는 MongoDB의 일부 문자열이 MongoDB의에 적절하고 유효한 날짜 필드로 포맷되어야하는 저장했다.
나는 MongoDB의 일부 문자열이 MongoDB의에 적절하고 유효한 날짜 필드로 포맷되어야하는 저장했다.
여기에 특별한 날짜 형식에 대한 내 코드입니다 : "2014-03-12T09 : 14 : 19.5303017 + 01 : 00"
하지만 당신은 쉽게 날짜 형식을 구문 분석이 아이디어를 가지고 자신의 정규식을 쓸 수 있습니다 :
// format: "2014-03-12T09:14:19.5303017+01:00" var myregexp = /(....)-(..)-(..)T(..):(..):(..)\.(.+)([\+-])(..)/; db.Product.find().forEach(function(doc) { var matches = myregexp.exec(doc.metadata.insertTime); if myregexp.test(doc.metadata.insertTime)) { var offset = matches[9] * (matches[8] == "+" ? 1 : -1); var hours = matches[4]-(-offset)+1 var date = new Date(matches[1], matches[2]-1, matches[3],hours, matches[5], matches[6], matches[7] / 10000.0) db.Product.update({_id : doc._id}, {$set : {"metadata.insertTime" : date}}) print("succsessfully updated"); } else { print("not updated"); } })
-
==============================
5.어떻게 이런 스크립트를 작성하여 momentjs 같은 라이브러리를 사용하는 방법에 대한 :
어떻게 이런 스크립트를 작성하여 momentjs 같은 라이브러리를 사용하는 방법에 대한 :
[install_moment.js] function get_moment(){ // shim to get UMD module to load as CommonJS var module = {exports:{}}; /* copy your favorite UMD module (i.e. moment.js) here */ return module.exports } //load the module generator into the stored procedures: db.system.js.save( { _id:"get_moment", value: get_moment, });
다음과 같이 명령 줄에서 스크립트를로드 :
> mongo install_moment.js
마지막으로, 다음 몽고 세션에서, 그래서 같이 사용할 수 :
// LOAD STORED PROCEDURES db.loadServerScripts(); // GET THE MOMENT MODULE var moment = get_moment(); // parse a date-time string var a = moment("23 Feb 1997 at 3:23 pm","DD MMM YYYY [at] hh:mm a"); // reformat the string as you wish: a.format("[The] DDD['th day of] YYYY"): //"The 54'th day of 1997"
-
==============================
6.당신은 ISO 날짜에 문자열을 날짜로 변환 $ dateFromString 집계를 사용할 수 있습니다
당신은 ISO 날짜에 문자열을 날짜로 변환 $ dateFromString 집계를 사용할 수 있습니다
db.collection.aggregate([ { "$project": { "date": { "$dateFromString": { "dateString": "$date" } } } } ])
from https://stackoverflow.com/questions/10942931/converting-string-to-date-in-mongodb by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] 어떻게하여 MongoDB의 마지막 N 기록을 얻을 수 있습니까? (0) | 2019.12.02 |
---|---|
[MONGODB] 어떻게하여 MongoDB에서 참조 된 개체는 쿼리합니까? (0) | 2019.12.01 |
[MONGODB] 정수 값에 MongoDB를 정규식 검색 (0) | 2019.12.01 |
[MONGODB] $ 조회 후 집계 필터 (0) | 2019.12.01 |
[MONGODB] MongoDB를 업데이트 깊이 하위 문서를 중첩 (0) | 2019.12.01 |