MongoDBで配列フィールドを逆順に反転させる方法【サンプルコード付き】
MongoDBで配列フィールドを逆順に反転させる方法
MongoDBで配列フィールドの要素の順序を反転させたい場合、forEach()メソッドを活用することで簡単に実現できます。この記事では、実際のコマンド例を交えながら、その手順をわかりやすく解説します。
ステップ1:サンプルコレクションの作成
まず、insertOne()メソッドを使って、配列フィールドを持つドキュメントを含むコレクションを作成しましょう。
> db.reverseArrayDemo.insertOne({"Skills":["C","Java"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ccddf99dceb9a92e6aa1946")
}
ステップ2:登録したドキュメントの確認
find()メソッドを使用すると、コレクション内のすべてのドキュメントを表示できます。
> db.reverseArrayDemo.find().pretty();
このクエリを実行すると、次のような出力が得られます。
{
"_id" : ObjectId("5ccddf99dceb9a92e6aa1946"),
"Skills" : [
"C",
"Java"
]
}
ステップ3:配列フィールドを逆順にするクエリ
ここからが本題です。forEach()とupdate()を組み合わせることで、配列フィールドの要素を逆順に入れ替えられます。
> db.reverseArrayDemo.find().forEach(function (myDocument) {
... var arrayValue = [ myDocument.Skills[1], myDocument.Skills[0] ];
... db.reverseArrayDemo.update(myDocument, { $set: {Skills : arrayValue } });
... });
このクエリの処理の流れは以下の通りです。
myDocument.Skills[1]とmyDocument.Skills[0]を入れ替えた新しい配列を生成$set演算子を使い、元の配列フィールドを新しい配列で上書き更新
ステップ4:実行結果の確認
もう一度find()メソッドでドキュメントを表示し、配列が正しく反転しているか確認してみましょう。
> db.reverseArrayDemo.find().pretty();
出力結果を見ると、「Skills」フィールドの要素が「Java」「C」の順に並び替えられていることがわかります。
{
"_id" : ObjectId("5ccddf99dceb9a92e6aa1946"),
"Skills" : [
"Java",
"C"
]
}
補足:任意の長さの配列に対応させるには
上記の例は要素が2つの配列を前提としていますが、JavaScriptのreverse()メソッドを利用すれば、任意の要素数の配列にも柔軟に対応できます。
db.reverseArrayDemo.find().forEach(function (doc) {
db.reverseArrayDemo.updateOne(
{ _id: doc._id },
{ $set: { Skills: doc.Skills.slice().reverse() } }
);
});
なお、旧式のupdate()メソッドは現在非推奨のため、最新のMongoDBではupdateOne()やupdateMany()の使用が推奨されています。また、slice()を挟んでいるのは、元の配列を直接変更せずにそのコピーを操作するためです。
-
JavaScriptの配列reverse()メソッドとは?使い方とサンプルコードを解説
JavaScriptのreverse()メソッドは、配列の要素を逆順に並べ替えるために使用されるメソッドです。呼び出すと元の配列そのものが反転され、その結果の配列が戻り値として返されます。構文array.reverse()reverse()メソッドのポイント引数は不要で、呼び出した配列自体を直接書き換えます(破壊的なメソッド)。戻り値は、要素が反転された配列への参照です。元の配列を変更せずに反転したい場合は、ES2023で追加されたtoReversed()メソッドを使うと便利です。それでは、実際にJavaScriptでreverse()メソッドを実装してみましょう。例1:基本的な使い方<
-
【初心者向け】JavaScriptのreverse()メソッドで配列を逆順にする方法
JavaScriptのreverse()メソッドは、配列の要素を元の順序と逆順に入れ替えるための便利な関数です。このメソッドを呼び出すと、配列の最初の要素が最後に、最後の要素が最初に移動し、配列全体が反転されます。reverse()メソッドの基本reverse()は配列そのものを変更する「破壊的メソッド」である点に注意してください。つまり、元の配列の順序が直接書き換えられます。元の配列を保持したい場合は、あらかじめslice()やスプレッド構文([...arr])などでコピーを作成してからreverse()を使用するのがおすすめです。サンプルコード以下は、ボタンをクリックすると配列の要素が逆順