2

私はMongoDBを使用するのにかなり慣れていません。

MongoDB コレクション内の特定のレコードの前のレコードを取得する必要があります。

  1. 「_id = ObjectId(...)」フィールドでこれを行うことは可能ですか?
  2. そうでない場合、指定されたレコードの前のレコードを識別するために、連続した値を持つキーを明示的に挿入する必要がありますか? (現在のコレクションにシーケンシャルなキーと値のペアがないと仮定します)

どんな助けでも大歓迎です。ありがとうございました。

4

2 に答える 2

3

すべてが等しい場合、_idフィールドのデフォルト値は aObjectIdであり、単調、つまり増加し続けます。

これは、既知のObjectId値が与えられた場合、その直前に挿入されたドキュメントを取得するために次のことが真であることを意味します。

db.collection.find(
    { "_id": { "$lt": ObjectId("538c271a19b3a188ca6135eb") }}
).sort({ "_id": -1 }).limit(1)

それが一般的なケースです。唯一の違いは、さまざまなソースがObjectId値を生成し、それらのクロックが異なる時間に設定されていることです (完全に異なる UTC 時間など)。

したがって、挿入率と相まって、これで十分かどうかを検討できます。また、まれで管理が不十分な状態を除いて、順序が常に維持されているとは限りません。

于 2014-06-02T07:28:29.760 に答える
2

最高のパフォーマンスを得るためにインデックスを使用することをお勧めします。

例: インデックスの作成:

db.books.ensureIndex({book: 1}) // for next records in collection
db.books.ensureIndex({book: -1}) // for previous records in collection

次のクエリは次のようになります。

db.books.find({book: {$gt:"a"}}).sort({book: 1}).hint({book: 1}).limit(1)

前のクエリは次のようになります。

db.books.find({book: {$lt:"b"}}).sort({book: -1}).hint({book: -1}).limit(1)
于 2014-06-02T07:36:51.113 に答える