MongoDBのクエリで配列を作成する方法を解説
MongoDBのクエリで配列を作成する方法
MongoDBでクエリ結果を配列として取得したい場合は、toArray() メソッドを使用します。find() が返すカーソルに対して toArray() を呼び出すことで、検索結果をJavaScriptの配列形式に変換できます。
基本となる構文は次のとおりです。
db.yourCollectionName.find({}, {yourFieldName: 1}).toArray();
サンプルコレクションの作成
まず、動作確認用のコレクションを作成してドキュメントを挿入してみましょう。
> db.createArrayDemo.insertOne({"UserName":"Chris"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cbd6461de8cc557214c0e00")
}
> db.createArrayDemo.insertOne({"UserName":"David"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cbd6467de8cc557214c0e01")
}
> db.createArrayDemo.insertOne({"UserName":"Robert"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cbd646cde8cc557214c0e02")
}
> db.createArrayDemo.insertOne({"UserName":"Sam"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cbd6470de8cc557214c0e03")
}
登録済みドキュメントの確認
find() メソッドを使うと、コレクション内のすべてのドキュメントを表示できます。
> db.createArrayDemo.find().pretty();
実行すると、次のような出力が得られます。
{ "_id" : ObjectId("5cbd6461de8cc557214c0e00"), "UserName" : "Chris" }
{ "_id" : ObjectId("5cbd6467de8cc557214c0e01"), "UserName" : "David" }
{ "_id" : ObjectId("5cbd646cde8cc557214c0e02"), "UserName" : "Robert" }
{ "_id" : ObjectId("5cbd6470de8cc557214c0e03"), "UserName" : "Sam" }
ケース1:_idを除外して特定フィールドのみの配列を作成する
UserName フィールドだけを含む配列を作成し、自動生成される _id を除外したい場合は、プロジェクションで _id: 0 を指定します。
> db.createArrayDemo.find({}, {_id: 0, UserName: 1}).toArray();
実行すると、次のような出力が得られます。
[
{
"UserName" : "Chris"
},
{
"UserName" : "David"
},
{
"UserName" : "Robert"
},
{
"UserName" : "Sam"
}
]
注意点: find() メソッドは第2引数以降に別々の条件を渡せないため、{_id: 0} と {UserName: 1} は必ず1つのプロジェクションオブジェクトにまとめて指定してください。
ケース2:_idフィールドのみの配列を作成する
逆に _id フィールドだけを含む配列が必要な場合は、次のクエリを使用します。
> db.createArrayDemo.find({}, {_id: 1}).toArray();
実行すると、次のような出力が得られます。
[
{
"_id" : ObjectId("5cbd6461de8cc557214c0e00")
},
{
"_id" : ObjectId("5cbd6467de8cc557214c0e01")
},
{
"_id" : ObjectId("5cbd646cde8cc557214c0e02")
},
{
"_id" : ObjectId("5cbd6470de8cc557214c0e03")
}
]
補足:値だけのシンプルな配列を取得するテクニック
ドキュメント全体ではなく、「Chris」「David」といった値そのものだけを配列として取り出したい場合は、toArray() の結果に map() を組み合わせると便利です。
> db.createArrayDemo.find().toArray().map(doc => doc.UserName); [ "Chris", "David", "Robert", "Sam" ]
このように toArray() を活用すれば、MongoDBのクエリ結果を柔軟に配列として扱えます。取得したいフィールドをプロジェクションで絞り込むことで、必要なデータだけを効率よく配列化できるので、用途に合わせて使い分けてみてください。
-
MongoDBの$push演算子で配列を更新する方法
MongoDBで配列に要素を追加・更新するには、$push 演算子と updateOne() メソッドを組み合わせて使用します。この記事では、実際のコード例を通じて、ネストされた配列内の特定のドキュメントを $push で更新する手順を解説します。サンプルコレクションの作成まず、insertOne() メソッドを使って、ドキュメントを含むコレクションを作成します。> db.demo526.insertOne( ... { ... CountryName: US, ... TeacherName: Bob, ... StudentInformation: [ ...
-
MongoDBのaggregate()で3階層にネストされた埋め込みドキュメントの配列をフィルタリングする方法
MongoDBでネストされた配列をフィルタリングする基本アプローチMongoDBで3階層にネストされた埋め込みドキュメントの配列をフィルタリングするには、aggregate()メソッドを使用します。集計パイプラインの中で$unwindによって配列を展開し、$matchで条件に一致するドキュメントを絞り込むのが基本的な流れです。この記事では、実際のコード例を通じて具体的な手順を解説します。1. サンプルコレクションの作成まずは動作確認用のコレクションを作成し、ドキュメントを挿入してみましょう。> db.demo736.insertOne( ... { ... _id: