Docs Menu
Docs Home
/
MongoDBマニュアル
/ / /

上限付きコレクションのクエリ

項目一覧

  • このタスクについて
  • 複数の同時書込み(write)
  • 始める前に
  • 上限付きコレクションの作成
  • サンプル データの挿入
  • 手順
  • 挿入順序でドキュメントを返す
  • 最新のドキュメントを返す
  • 詳細

ソート順序を指定せずに Capped コレクションをクエリすると、MongoDB は挿入された順序と同じ順序で結果を返します。つまり、最も古いドキュメントが最初に返されることを意味します。

コレクションから最後に挿入された要素を効率的に検索するには、 自然な順序付けを使用します。 この機能を用いると、ログファイルに対して tailコマンドを使用するのと同様の結果が得られます。

一般的に、 TTL(Time To Live)インデックスは、Cappedコレクションよりも優れたパフォーマンスと柔軟性を提供します。 TTL インデックスは期限切れとなり、日付型フィールドの値とインデックスの TTL 値に基づいて、通常のコレクションからデータを削除します。

Capped コレクションでは書込み操作がシリアル化されるため、それ以外のコレクションよりも同時挿入、更新、削除のパフォーマンスは低くなります。 Capped コレクションを作成する前に、TTL インデックスで代替できないかを検討しましょう。

Capped コレクションへの同時書込み(write)が存在する場合、MongoDB はドキュメントが挿入順で返されることを保証しません。

1
db.createCollection("log", { capped: true, size: 100000 } )
2
db.log.insertMany( [
{
message: "system start",
type: "startup",
time: 1711403508
},
{
message: "user login attempt",
type: "info",
time: 1711403907
},
{
message: "user login fail",
type: "warning",
time: 1711404209
},
{
message: "user login success",
type: "info",
time: 1711404367
},
{
message: "user logout",
type: "info",
time: 1711404555
}
] )

次の例は、次の方法を示しています。

  • 挿入順序でドキュメントを返す

  • 最新のドキュメントを返す

logコレクションで、 typeinfoであるドキュメントをクエリし、デフォルトの並べ替え順序を使用します。

db.log.find( { type: "info" } )
[
{
_id: ObjectId("660204b74cabd75abebadbc2"),
message: 'user login attempt',
type: 'info',
time: 1711403907
},
{
_id: ObjectId("660204b74cabd75abebadbc4"),
message: 'user login success',
type: 'info',
time: 1711404367
},
{
_id: ObjectId("660204b74cabd75abebadbc5"),
message: 'user logout',
type: 'info',
time: 1711404555
}
]

ドキュメントは、挿入された順序で返されます。

逆の挿入順序(最新ドキュメントが最初)でドキュメントを返すには、 パラメータをsort() $naturalに設定して-1 メソッドを指定します。

次のクエリは、 logコレクションから最新のドキュメントから始めて、3 つの最新のドキュメントを返します。

db.log.find().sort( { $natural: -1 } ).limit(3)
[
{
_id: ObjectId("6601f2484cabd75abebadbbb"),
message: 'user logout',
type: 'info',
time: 1711404555
},
{
_id: ObjectId("6601f2484cabd75abebadbba"),
message: 'user login success',
type: 'info',
time: 1711404367
},
{
_id: ObjectId("6601f2484cabd75abebadbb9"),
message: 'user login fail',
type: 'warning',
time: 1711404209
}
]

戻る

作成