문서의 다른 필드 값으로 필드 업데이트
수집품이 있습니다.t1
스키마에 다음 필드가 있는 경우
_id, field1, field1
세트를 원합니다field2
의 가치field1
예를 들어 sql:
update t1 set field1=field2;
MongoDB에서 어떻게 합니까?
여기 좋은 소식과 나쁜 소식이 있습니다.
나쁜 소식은 AFAIK 한 번의 업데이트() 통화로는 할 수 없다는 것입니다. - mongo는 업데이트 중인 현재 개체를 참조하는 것을 지원하지 않습니다.
좋은 소식은 다른 방법이 있다는 것입니다. 예를 들어 각 루프에 대해 를 실행할 수 있습니다.
db.item.find(conditions...).snapshot().forEach( function (doc) {
doc.field1 = doc.field2;
db.item.save(doc);
});
관리 셸('mongo' 명령)에서 각을 실행하거나 특정 드라이버의 일부 메소드를 통해 실행할 수 있습니다(예: PHP에서는 mongodb와 함께 작동할 것으로 예상합니다).여기에 설명된 대로 http://www.php.net/manual/en/mongodb.execute.php) 을 실행합니다.
버전 3.4부터는 다음 기능을 사용할 수 있습니다.$addFields
가장 효율적인 방법인 클라이언트 측 처리 없이 집계 파이프라인 운영자가 이 작업을 수행할 수 있습니다.
db.collection.aggregate(
[
{ "$addFields": { "field2": "$field1" }},
{ "$out": "collection" }
]
)
버전 3.4 이전 버전에서는Cursor
기존 "field1" 값으로 새 필드를 추가하려면 operator를 사용합니다.최대 효율성을 위해 "대량" 작업을 사용하여 이 작업을 수행해야 합니다.
MongoDB 3.2는 및 관련 메서드를 더 이상 사용하지 않으므로 3.2 이상에서는 메서드를 사용해야 합니다.
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까지Bulk
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();
}
이 작업은 다음을 통해 수행할 수 있습니다.
db.nameOfCollection.find().forEach(
function (elem) {
db.nameOfCollection.update(
{
_id: elem._id
},
{
$set: {
field2: elem.field1
}
}
);
}
);
언급URL : https://stackoverflow.com/questions/2606657/update-field-with-another-fields-value-in-the-document
'programing' 카테고리의 다른 글
vba excel에서 여러 구분 기호로 문자열을 분할하는 방법은 무엇입니까? (0) | 2023.07.03 |
---|---|
전 세계적으로 노출된 타사 모듈 확장 (0) | 2023.07.03 |
mongodb-10gen 설치가 apt-get과 함께 실패했습니다. (0) | 2023.07.03 |
시스템이 정의되지 않았습니다. (0) | 2023.07.03 |
메모리 대역폭이 병목 현상이 되었는지 확인하는 방법은 무엇입니까? (0) | 2023.07.03 |