[MONGODB] 문서에서 다른 필드의 값을 업데이트 필드 [중복]
MONGODB문서에서 다른 필드의 값을 업데이트 필드 [중복]
나는 그것의 스키마에 다음 필드 컬렉션 T1이
_id, field1, field1
나는 SQL과 같은 설정 FIELD2의 값 필드 1을 원하는 :
update t1 set field1=field2;
어떻게하여 MongoDB에서해야합니까?
해결법
-
==============================
1.좋은 여기 나쁜 소식.
좋은 여기 나쁜 소식.
몽고를 업데이트에서 현재 객체를 참조 지원하지 않습니다 - 나쁜 소식은 AFAIK 당신이 하나의 갱신 () 호출을 할 수 없다는 것입니다.
좋은 소식은 그것을 할 수있는 다른 방법은 예를 들어 있다는 것입니다 당신은 foreach 루프를 실행할 수 있습니다 :
db.item.find(conditions...).forEach( function (doc) { doc.field1 = doc.field2; db.item.save(doc); });
당신은 ( '몽고'명령) 관리자 쉘에 대해 forEach를 실행하거나 특정 드라이버의 몇 가지 방법을 통해 (예를 들어, PHP에서 나는 mongodb.execute과 함께 작업에 기대 () 여기에 설명 : HTTP : / /www.php.net/manual/en/mongodb.execute.php)
-
==============================
2.버전 3.4에서 시작, 우리는 $ addFields이 가장 효율적인 방법입니다 클라이언트 측 처리없이이에 파이프 라인 연산자를 응집 할 수 있습니다.
버전 3.4에서 시작, 우리는 $ addFields이 가장 효율적인 방법입니다 클라이언트 측 처리없이이에 파이프 라인 연산자를 응집 할 수 있습니다.
db.collection.aggregate( [ { "$addFields": { "field2": "$field1" }}, { "$out": "collection" } ] )
버전 3.4 이전에 우리는 반복 커서 오브젝트를 필요로하고 기존의 "필드 1"값으로 새로운 필드를 추가 $ 집합 연산자를 사용합니다. 당신은 최대 효율이 사용하는 "대량"작업을 수행해야합니다.
MongoDB를 3.2 deprecates 벌크 () 따라서 3.2 관련 방법은 위쪽으로 당신은 bulkWrite 방법을 사용해야합니다.
var requests = []; db.collection.find({}, { 'field1': 1 } ).snapshot().forEach(document => { requests.push( { 'updateOne': { 'filter': { '_id': document._id }, 'update': { '$set': { 'field2': document.field1 } } } }); if (requests.length === 1000) { //Execute per 1000 operations and re-init db.collection.bulkWrite(requests); requests = []; } }); if(requests.length > 0) { db.collection.bulkWrite(requests); }
버전 2.6에서 3.0으로 당신은 대량 API를 사용할 수 있습니다.
var bulk = db.collection.initializeUnorderedBulOp(); var count = 0; db.collection.find({}, { 'field1': 1 }).snapshot().forEach(function(document) { bulk.find({ '_id': document._id }).updateOne( { '$set': { 'field2': document.field1 } }); count++; if(count%1000 === 0) { // Excecute per 1000 operations and re-init bulk.execute(); bulk = db.collection.initializeUnorderedBulkOp(); } }) // clean up queues if(count > 0) { bulk.execute(); }
-
==============================
3.이를 통해 수행 할 수 있습니다 :
이를 통해 수행 할 수 있습니다 :
db.nameOfCollection.find().forEach( function (elem) { db.nameOfCollection.update( { _id: elem._id }, { $set: { field2: elem.field1 } } ); } );
from https://stackoverflow.com/questions/2606657/update-field-with-another-fields-value-in-the-document by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] MongoDB를 가진 고유 ID (0) | 2019.12.17 |
---|---|
[MONGODB] MongoDB를에 정렬 사례를 구분 (0) | 2019.12.17 |
[MONGODB] PHP MongoDB를 : 치명적인 오류 : 클래스 'MongoClient'을 (를) 찾을 수 없습니다 (0) | 2019.12.17 |
[MONGODB] 몽고 그룹 푸시 : 모든 필드를 밀어 (0) | 2019.12.17 |
[MONGODB] MongoDB의 여러 컬렉션에서 검색 (0) | 2019.12.17 |