MongoDBで$slice演算子を使って配列の最後の要素を取得する方法
MongoDBで配列の最後の要素を取得したい場合は、$slice演算子に負の値を指定するのが便利です。この記事では、実際のコード例を通じて、その使い方をわかりやすく解説します。
$slice演算子による最後の要素取得の基本構文
配列の最後の要素を取得するには、以下のような構文を使用します。$sliceに「-1」を指定することで、配列の末尾にある1つの要素だけを取り出せます。
db.yourCollectionName.find({},{yourArrayFieldName:{$slice:-1}});サンプルコレクションの作成
まず、ドキュメントを含むコレクションを作成しましょう。ここでは学生の名前と数学のスコア(配列)を持つコレクションを作成します。
> db.getLastElementOfArrayDemo.insertOne({"StudentName":"James","StudentMathScore":[78,68,98]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c9d2d71a629b87623db1b2e")
}
> db.getLastElementOfArrayDemo.insertOne({"StudentName":"Chris","StudentMathScore":[88,56,34]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c9d2d83a629b87623db1b2f")
}
> db.getLastElementOfArrayDemo.insertOne({"StudentName":"Larry","StudentMathScore":[99]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c9d2d8ea629b87623db1b30")
}
> db.getLastElementOfArrayDemo.insertOne({"StudentName":"Robert","StudentMathScore":[90,78,67,66,75,73]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c9d2dada629b87623db1b31")
}上記の例では、4人の学生データを挿入しました。各学生の数学スコアは配列として格納されており、配列の長さはそれぞれ異なります。
登録済みドキュメントの確認
find()メソッドとpretty()メソッドを組み合わせて、コレクション内のすべてのドキュメントを表示してみましょう。
> db.getLastElementOfArrayDemo.find().pretty();
このクエリを実行すると、以下の出力が得られます。
{
"_id" : ObjectId("5c9d2d71a629b87623db1b2e"),
"StudentName" : "James",
"StudentMathScore" : [
78,
68,
98
]
}
{
"_id" : ObjectId("5c9d2d83a629b87623db1b2f"),
"StudentName" : "Chris",
"StudentMathScore" : [
88,
56,
34
]
}
{
"_id" : ObjectId("5c9d2d8ea629b87623db1b30"),
"StudentName" : "Larry",
"StudentMathScore" : [
99
]
}
{
"_id" : ObjectId("5c9d2dada629b87623db1b31"),
"StudentName" : "Robert",
"StudentMathScore" : [
90,
78,
67,
66,
75,
73
]
}$slice演算子で最後の要素を取得するクエリ
それでは、本題である配列の最後の要素を取得するクエリを実行します。第2引数のプロジェクションで$slice: -1を指定するのがポイントです。
> db.getLastElementOfArrayDemo.find({},{StudentMathScore:{$slice:-1}});実行結果は以下の通りです。
{ "_id" : ObjectId("5c9d2d71a629b87623db1b2e"), "StudentName" : "James", "StudentMathScore" : [ 98 ] }
{ "_id" : ObjectId("5c9d2d83a629b87623db1b2f"), "StudentName" : "Chris", "StudentMathScore" : [ 34 ] }
{ "_id" : ObjectId("5c9d2d8ea629b87623db1b30"), "StudentName" : "Larry", "StudentMathScore" : [ 99 ] }
{ "_id" : ObjectId("5c9d2dada629b87623db1b31"), "StudentName" : "Robert", "StudentMathScore" : [ 73 ] }実行結果のポイント
出力を見ると、各学生のStudentMathScore配列から最後の要素のみが取得できていることがわかります。
- James の場合: [78, 68, 98] → 最後の要素は 98
- Chris の場合: [88, 56, 34] → 最後の要素は 34
- Larry の場合: [99] → 要素が1つしかないため 99
- Robert の場合: [90, 78, 67, 66, 75, 73] → 最後の要素は 73
このように、$slice演算子に負の値を指定すると配列の末尾から要素を取得できます。「-1」なら最後の1つ、「-3」なら最後の3つというように、取得する要素数を柔軟に制御できます。配列の先頭から取得したい場合は正の値を指定してください。
-
JavaScriptで配列の最後の要素を取得する方法【slice()ほか複数の手法を解説】
JavaScriptで配列の最後の要素を取得したい場合、slice()メソッドを使うのが簡単で確実な方法の一つです。負のインデックスを指定することで、配列の末尾から要素を取り出せます。slice()メソッドを使った基本的な例以下のコードでは、slice(-1)によって配列の最後の要素だけを含む新しい配列を作成し、[0]でその値を取り出しています。<html> <body> <script> var array = [30, 40, 50, 60]; document.write(array.slice(-1)[0]); // 結果: 60
-
【Android開発】ConcurrentLinkedDequeで最後の要素を取得する方法をわかりやすく解説
ConcurrentLinkedDequeとは具体的な実装例に入る前に、まずConcurrentLinkedDequeについて簡単に説明します。ConcurrentLinkedDequeは、リンクノードをベースとした容量制限のない両端キュー(deque)です。内部がスレッドセーフに設計されているため、複数のスレッドから同時に要素へアクセスしても、安全性が保証されるという大きな特徴があります。本記事では、AndroidアプリにおいてConcurrentLinkedDequeの最後の要素(末尾の要素)を取得する方法を、サンプルコードとともに段階的に解説していきます。手順1:新規プロジェクトの作成ま