HOWTO · MongoDB

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

이 튜토리얼은 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 배열로 푸시됩니다.