[MONGODB] 어떻게 필드의 유형을 변경하려면?
MONGODB어떻게 필드의 유형을 변경하려면?
나는 몽고 쉘 내에서 필드의 유형을 변경하려합니다.
나는이 일을하고 ...
db.meta.update(
{'fields.properties.default': { $type : 1 }},
{'fields.properties.default': { $type : 2 }}
)
그러나 그것은 작동하지 않습니다!
해결법
-
==============================
1.데이터의 $ 유형을 변경하는 유일한 방법은 데이터가 올바른 유형이 데이터에 대한 업데이트를 수행하는 것입니다.
데이터의 $ 유형을 변경하는 유일한 방법은 데이터가 올바른 유형이 데이터에 대한 업데이트를 수행하는 것입니다.
당신이 (더블) 1 ~ 2 (문자열)에서 $ 유형을 변경하려는 것처럼이 경우, 그것은 보인다.
그래서 간단하게 다시 문서를 저장 한 다음 캐스트 (새 문자열 (X)) 등을 수행 DB에서 문서를로드합니다.
당신은 쉘에서 프로그램과 완전히이 작업을 수행해야하는 경우 찾기 (...)를 사용할 수 있습니다. 대해 forEach (기능 (X) {}) 구문을.
아래의 두 번째 의견에 대응. 수집에 foo 문자열로 숫자에서 필드 불량을 변경합니다.
db.foo.find( { 'bad' : { $type : 1 } } ).forEach( function (x) { x.bad = new String(x.bad); // convert field to string db.foo.save(x); });
-
==============================
2.정수에 문자열 필드를 변환 :
정수에 문자열 필드를 변환 :
db.db-name.find({field-name: {$exists: true}}).forEach(function(obj) { obj.field-name = new NumberInt(obj.field-name); db.db-name.save(obj); });
문자열에 정수 필드로 변환 :
db.db-name.find({field-name: {$exists: true}}).forEach(function(obj) { obj.field-name = "" + obj.field-name; db.db-name.save(obj); });
-
==============================
3.INT 변환 문자열.
INT 변환 문자열.
db.my_collection.find().forEach( function(obj) { obj.my_value= new NumberInt(obj.my_value); db.my_collection.save(obj); });
이중 변환 문자열.
obj.my_value= parseInt(obj.my_value, 10);
플로트의 경우 :
obj.my_value= parseFloat(obj.my_value);
-
==============================
4.
db.coll.find().forEach(function(data) { db.coll.update({_id:data._id},{$set:{myfield:parseInt(data.myfield)}}); })
-
==============================
5.모든 대답은 지금까지 모든 컬렉션 요소 클라이언트 측 반복의 Foreach의 일부 버전을 사용하십시오.
모든 대답은 지금까지 모든 컬렉션 요소 클라이언트 측 반복의 Foreach의 일부 버전을 사용하십시오.
그러나 집계 파이프 라인 및 $ 등의 단계에서를 사용하여 MongoDB를의 서버 측 처리를 사용할 수 있습니다 :
예:
db.documents.aggregate([ { $project: { _id: 1, numberField: { $substr: ['$numberField', 0, -1] }, otherField: 1, differentField: 1, anotherfield: 1, needolistAllFieldsHere: 1 }, }, { $out: 'documents', }, ]);
-
==============================
6.배열은 당신의 번호로 ""추가 생성하지 않고 몽고에서 문자열로 INT32 변환하려면 :-)
배열은 당신의 번호로 ""추가 생성하지 않고 몽고에서 문자열로 INT32 변환하려면 :-)
db.foo.find( { 'mynum' : { $type : 16 } } ).forEach( function (x) { x.mynum = x.mynum + ""; // convert int32 to string db.foo.save(x); });
-
==============================
7.날짜 필드에 문자열 유형의 필드를 변환하려면, 당신은 $를 사용하여 업데이트 한 후 Date 객체에 필드를 변환하고 반복 필드 루프 내에서 foreach는 () 메소드를 사용하여 찾기 () 메소드에 의해 반환 커서를, 필요 집합 연산자.
날짜 필드에 문자열 유형의 필드를 변환하려면, 당신은 $를 사용하여 업데이트 한 후 Date 객체에 필드를 변환하고 반복 필드 루프 내에서 foreach는 () 메소드를 사용하여 찾기 () 메소드에 의해 반환 커서를, 필요 집합 연산자.
당신은 당신이 모든에 단 한 번, 서버에 대한 모든 요청을 전송하지 않는 한 당신에게 더 나은 성능을 제공합니다 말 1000 일괄 서버로 작업을 보내는 것으로 더 나은 성능을 제공 대량 업데이트를 대량 API를 사용하여 활용 1000 개 요청.
다음은 첫 번째 예 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 Date(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(); }
다음 예제는 이후 bulkWrite ()를 사용하는 API의 새로운 세트를 대량 API를 사용되지 않으며 제공 한 새로운 MongoDB를 버전 3.2에 적용
var bulkOps = []; db.collection.find({"created_at": {"$exists": true, "$type": 2 }}).forEach(function (doc) { var newDate = new Date(doc.created_at); bulkOps.push( { "updateOne": { "filter": { "_id": doc._id } , "update": { "$set": { "created_at": newDate } } } } ); }) db.collection.bulkWrite(bulkOps, { "ordered": true });
-
==============================
8.정말로 MongoDB의에서 개체의 유형을 변경하는 나에게 도움이 것은 아마도 ... 전 여기에 언급 단지이 간단한 라인했다 :
정말로 MongoDB의에서 개체의 유형을 변경하는 나에게 도움이 것은 아마도 ... 전 여기에 언급 단지이 간단한 라인했다 :
db.Users.find({age: {$exists: true}}).forEach(function(obj) { obj.age = new NumberInt(obj.age); db.Users.save(obj); });
사용자는 내 컬렉션이며, 나이는 대신 정수 (INT32)의 문자열을했다 객체입니다.
-
==============================
9.몽고 4.2 시작, db.collection.update ()는 마지막으로 자신의 값에 따라 필드의 업데이트를 허용 집계 파이프 라인을 받아 들일 수 있습니다 :
몽고 4.2 시작, db.collection.update ()는 마지막으로 자신의 값에 따라 필드의 업데이트를 허용 집계 파이프 라인을 받아 들일 수 있습니다 :
// { a: "45", b: "x" } // { a: 53, b: "y" } db.collection.update( { a : { $type: 1 } }, [{ $set: { a: { $toString: "$a" } } }], { multi: true } ) // { a: "45", b: "x" } // { a: "53", b: "y" }
경우 캐스트가 아닌 이중에서 문자열로, 당신은 $ toBool, $ toInt 같은 몽고 4.0에 도입 된 다른 변환 사업자 사이의 선택의 여지가 ...
귀하의 타겟 유형에 대한 전용 컨버터가없는 경우, 당신은 {$ toString을 "$ A"} 대체 할 수있는 $의 변환 동작 : {$ 변환 : {입력 : "$ A"로 : 2}} 경우 에 대한 값은이 테이블에서 찾을 수 있습니다 :
db.collection.update( { a : { $type: 1 } }, [{ $set: { a: { $convert: { input: "$a", to: 2 } } } }], { multi: true } )
-
==============================
10.나는이 문서의 수집에 여러 데이터 유형을 변경하려면 다음을 사용 그래서 나는, 컬렉션에 여러 필드의 데이터 유형을 변경해야합니다. 오래된 질문에 대한 답변 그러나 다른 사람을 위해 도움이 될 수 있습니다.
나는이 문서의 수집에 여러 데이터 유형을 변경하려면 다음을 사용 그래서 나는, 컬렉션에 여러 필드의 데이터 유형을 변경해야합니다. 오래된 질문에 대한 답변 그러나 다른 사람을 위해 도움이 될 수 있습니다.
db.mycoll.find().forEach(function(obj) { if (obj.hasOwnProperty('phone')) { obj.phone = "" + obj.phone; // int or longint to string } if (obj.hasOwnProperty('field-name')) { obj.field-name = new NumberInt(obj.field-name); //string to integer } if (obj.hasOwnProperty('cdate')) { obj.cdate = new ISODate(obj.cdate); //string to Date } db.mycoll.save(obj); });
-
==============================
11.나는 부동 소수점 변환에 문자열을 MongoDB의 콘솔에서이 스크립트를 사용 ...
나는 부동 소수점 변환에 문자열을 MongoDB의 콘솔에서이 스크립트를 사용 ...
db.documents.find({ 'fwtweaeeba' : {$exists : true}}).forEach( function(obj) { obj.fwtweaeeba = parseFloat( obj.fwtweaeeba ); db.documents.save(obj); } ); db.documents.find({ 'versions.0.content.fwtweaeeba' : {$exists : true}}).forEach( function(obj) { obj.versions[0].content.fwtweaeeba = parseFloat( obj.versions[0].content.fwtweaeeba ); db.documents.save(obj); } ); db.documents.find({ 'versions.1.content.fwtweaeeba' : {$exists : true}}).forEach( function(obj) { obj.versions[1].content.fwtweaeeba = parseFloat( obj.versions[1].content.fwtweaeeba ); db.documents.save(obj); } ); db.documents.find({ 'versions.2.content.fwtweaeeba' : {$exists : true}}).forEach( function(obj) { obj.versions[2].content.fwtweaeeba = parseFloat( obj.versions[2].content.fwtweaeeba ); db.documents.save(obj); } );
PHP에서 그리고이 일)))
foreach($db->documents->find(array("type" => "chair")) as $document){ $db->documents->update( array('_id' => $document[_id]), array( '$set' => array( 'versions.0.content.axdducvoxb' => (float)$document['versions'][0]['content']['axdducvoxb'], 'versions.1.content.axdducvoxb' => (float)$document['versions'][1]['content']['axdducvoxb'], 'versions.2.content.axdducvoxb' => (float)$document['versions'][2]['content']['axdducvoxb'], 'axdducvoxb' => (float)$document['axdducvoxb'] ) ), array('$multi' => true) ); }
-
==============================
12.
You can easily convert the string data type to numerical data type. Don't forget to change collectionName & FieldName. for ex : CollectionNmae : Users & FieldName : Contactno.
이 쿼리 ..
db.collectionName.find().forEach( function (x) { x.FieldName = parseInt(x.FieldName); db.collectionName.save(x); });
-
==============================
13.몽고 OBJECTID 사용 몽구스에 문자열에서 필드 중간의 데모 변경 유형
몽고 OBJECTID 사용 몽구스에 문자열에서 필드 중간의 데모 변경 유형
Post.find({}, {mid: 1,_id:1}).exec(function (err, doc) { doc.map((item, key) => { Post.findByIdAndUpdate({_id:item._id},{$set:{mid: mongoose.Types.ObjectId(item.mid)}}).exec((err,res)=>{ if(err) throw err; reply(res); }); }); });
몽고 ObjectId가이 같은 스타일의 또 다른 예입니다
숫자, 문자열, 다른 응답 의지 도움말 사람을 희망 부울.
-
==============================
14.내 경우, 나는 다음을 사용
내 경우, 나는 다음을 사용
function updateToSting(){ var collection = "<COLLECTION-NAME>"; db.collection(collection).find().forEach(function(obj) { db.collection(collection).updateOne({YOUR_CONDITIONAL_FIELD:obj.YOUR_CONDITIONAL_FIELD},{$set:{YOUR_FIELD:""+obj.YOUR_FIELD}}); }); }
from https://stackoverflow.com/questions/4973095/how-to-change-the-type-of-a-field by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] db.collection MongoClient은 버전 3.0을 사용하여 함수가 아니다 (0) | 2019.11.30 |
---|---|
[MONGODB] 중복 몽고 ObjectId가의 가능성은 두 개의 서로 다른 컬렉션에서 생성되는거야? (0) | 2019.11.30 |
[MONGODB] MongoDB의에서 페이지 매김을 구현 (0) | 2019.11.30 |
[MONGODB] MongoDB를 어떻게 하나의 명령으로 여러 문서를 업데이트? (0) | 2019.11.30 |
[MONGODB] ID를 일치하지 않습니다 총 $ 일치 몽구스 (0) | 2019.11.30 |