forEach()를 사용하여 MongoDB 셸에서 배열 필드 업데이트

Mehvish Ashiq 2022년6월21일
forEach()를 사용하여 MongoDB 셸에서 배열 필드 업데이트

오늘은 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()를 사용하여 collectionfields.items 필드 값을 반복합니다. 모든 값을 사용하여 원하는 업데이트를 구성하고 aNewItem 변수에 저장합니다. 이 변수는 push() 메서드를 사용하여 newItem 배열에 추가로 삽입됩니다.

그런 다음 oneField._idnewItems 배열을 사용하여 문서를 만들고 collection을 업데이트하는 데 추가로 사용되는 newFields 배열로 푸시됩니다.

Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

관련 문장 - MongoDB Array

관련 문장 - MongoDB Document