forEach()를 사용하여 MongoDB 셸에서 배열 필드 업데이트
Mehvish Ashiq
2022년6월21일
오늘은 forEach()
를 사용하여 MongoDB 셸을 사용하는 동안 배열 필드를 업데이트하는 방법을 배웁니다.
forEach()
를 사용하여 MongoDB 셸에서 배열 필드 업데이트
forEach()
를 사용하기 위해 두 개의 문서가 포함된 collection
이라는 샘플 컬렉션을 준비하겠습니다. 계속하려면 다음 쿼리를 사용할 수도 있습니다.
예제 코드:
> use updateArrayField
> db.createCollection('collection');
> db.collection.insertMany([
{
"name": "Mehvish",
"gender": "Female",
"fields" : [
{ "_id" : 1, "items" : [ 1,3,4,5,6,7 ] }
]
},
{
"name": "Thomas Christopher",
"gender": "Male",
"fields" : [
{ "_id" : 1, "items" : [ 1,3,4,5,6,7 ] }
]
}
]);
다음으로 이 문서를 사용하여 fields.items
라는 배열 필드를 업데이트합니다.
"items" : [ 1,3,4,5,6,7]
에게
"items" : [
{item: 1, key: 0},
{item: 3, key: 0},
{item: 4, key: 0},
{item: 5, key: 0},
{item: 6, key: 0},
{item: 7, key: 0}
]
이를 위해 아래와 같이 중첩된 forEach()
를 사용할 수 있습니다.
예제 코드:
> var table = db.collection.find();
> table.forEach(function( oneRow ) {
var newFields = [];
oneRow.fields.forEach( function( oneField ){
var newItems = [];
oneField.items.forEach( function( item ){
var aNewItem = { item: parseInt(item), key: 0 };
newItems.push( aNewItem );
} );
newFields.push({ _id: oneField._id, items: newItems });
} )
db.collection.update(
{ _id: oneRow._id },
{ "$set": { "fields": newFields } }
);
});
업데이트된 문서를 보려면 mongo 셸에서 다음 쿼리를 실행합니다.
예제 코드:
> db.collection.find()
출력:
{
"_id" : ObjectId("62a708054eb9c63e48daeba4"),
"name" : "Mehvish",
"gender" : "Female",
"fields" : [
{
"_id" : 1,
"items" : [
{ "item" : 1, "key" : 0 },
{ "item" : 3, "key" : 0 },
{ "item" : 4, "key" : 0 },
{ "item" : 5, "key" : 0 },
{ "item" : 6, "key" : 0 },
{ "item" : 7, "key" : 0 }
]
}
]
}
{
"_id" : ObjectId("62a708054eb9c63e48daeba5"),
"name" : "Thomas Christopher",
"gender" : "Male",
"fields" : [
{
"_id" : 1,
"items" : [
{ "item" : 1, "key" : 0 },
{ "item" : 3, "key" : 0 },
{ "item" : 4, "key" : 0 },
{ "item" : 5, "key" : 0 },
{ "item" : 6, "key" : 0 },
{ "item" : 7, "key" : 0 }
]
}
]
}
위의 출력을 얻기 위해 collection
에서 모든 데이터를 읽고 forEach()
를 사용하여 collection
의 모든 단일 문서를 반복합니다. 다음으로 다른 forEach()
를 사용하여 지정된 문서의 모든 단일 필드를 반복합니다.
그런 다음 세 번째 forEach()
를 사용하여 collection
의 fields.items
필드 값을 반복합니다. 모든 값을 사용하여 원하는 업데이트를 구성하고 aNewItem
변수에 저장합니다. 이 변수는 push()
메서드를 사용하여 newItem
배열에 추가로 삽입됩니다.
그런 다음 oneField._id
및 newItems
배열을 사용하여 문서를 만들고 collection
을 업데이트하는 데 추가로 사용되는 newFields
배열로 푸시됩니다.
작가: Mehvish Ashiq