forEach()を使用して、MongoDB シェルの配列フィールドを更新する
Mehvish Ashiq
2022年6月21日
今日は、MongoDB シェルを使用しながら、forEach()
を使用して配列フィールドを更新する方法を学習します。
forEach()
を使用して、MongoDB シェルの配列フィールドを更新する
forEach()
を使用するには、2つのドキュメントを含む 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()
を使用して、指定したドキュメントのすべてのフィールドをループします。
次に、3 番目の forEach()
を使用して、collection
の fields.items
フィールドの値を繰り返し処理します。すべての値を使用して目的の更新を作成し、それを aNewItem
変数に保存します。この変数は、push()
メソッドを使用して newItems
配列にさらに挿入されます。
その後、oneField._id
と newItems
配列を使用してドキュメントを作成します。これらは newFields
配列にプッシュされ、さらに collection
を更新するために使用されます。
著者: Mehvish Ashiq