MongoDBで配列の要素を1つだけ取得する方法|$slice演算子の使い方
MongoDBの$sliceで配列の要素を1つだけ取得する
配列から特定の件数の要素だけを取り出したい場合、MongoDBでは$slice演算子を使用します。$sliceはプロジェクション演算子の一種で、指定した件数分の配列要素のみを返すことができます。
ここでは、実際にコレクションを作成し、$sliceを使って配列の先頭1件だけを取得する手順を順番に見ていきましょう。
サンプルデータの作成
まず、insertOne()メソッドを使ってドキュメントをコレクションに挿入します。
> db.demo579.insertOne(
... {
... "_id" : 101,
... "details" : { "FirstName" : "John" },
... "Marks" : [ 56,78,90,34,45,74 ]
... }
... );
{ "acknowledged" : true, "insertedId" : 101 }挿入したドキュメントの確認
find()メソッドを使うと、コレクション内のすべてのドキュメントを表示できます。
> db.demo579.find().pretty();
上記のコマンドを実行すると、次のような出力が得られます。
{
"_id" : 101,
"details" : {
"FirstName" : "John"
},
"Marks" : [
56,
78,
90,
34,
45,
74
]
}$sliceを使ったクエリの実行
配列の先頭要素を1つだけ取得するには、find()の第2引数(プロジェクション)で「Marks : {$slice : 1}」を指定します。あわせて「details」と「_id」フィールドに0を設定することで、不要なフィールドを出力結果から除外しています。
> db.demo579.find({},{Marks : {$slice : 1} ,"details":0,"_id":0})実行結果は以下のとおりです。
{ "Marks" : [ 56 ] }補足:$sliceのさまざまな使い方
$sliceに正の値を指定すると配列の先頭から、負の値(例:-1)を指定すると末尾から要素を取得できます。また、「{$slice: [スキップ数, 取得件数]}」という形式を使えば、任意の位置から指定件数を取り出すことも可能です。ページネーションや配列データの部分表示など、さまざまな場面で活用できる便利な演算子なので、ぜひ覚えておきましょう。
-
MongoDBでサブドキュメントの配列をクエリする方法
MongoDBでサブドキュメントの配列をクエリするには、集計パイプラインの$unwindを使用します。$unwindは、配列フィールドを展開し、配列の各要素ごとに個別のドキュメントを生成するステージです。これにより、配列内のサブドキュメントを個別にフィルタリングできるようになります。ここでは、大学の情報を含むコレクションを作成し、その中から特定の条件に一致するサブドキュメントを抽出する手順を解説します。コレクションの作成まず、insertOne()メソッドを使って、サブドキュメントの配列を含むドキュメントを挿入しましょう。> db.demo499.insertOne({... "
-
MongoDBで配列要素の平均値を取得するクエリの書き方
MongoDBで配列内の数値の平均を求める方法MongoDBでは、配列に格納された複数の数値から平均値を算出したいケースがよくあります。例えば、1つのドキュメントの中に複数の点数(Marks)が配列として保存されている場合、その平均点を取得したいことがあります。このような場合、集計パイプライン(aggregation)と$avg演算子を組み合わせることで、簡単に平均値を求めることができます。$avgは、指定したフィールド(配列の場合はその全要素)の数値の平均を自動的に計算してくれる便利な演算子です。以下、具体的な手順を見ていきましょう。1. コレクションを作成し、ドキュメントを挿入するまず、i