3

挿入の逆の順序で pymongo コレクションからの値を必要とする関数を実装したかったのです。

私はいくつかの方法を考えることができます:

cursor = collection.find(skip=collection.count()-LIMIT_VAL,limit=LIMIT_VAL)
rows = list(cursor).reverse()

LIMIT_VAL は変数であり、全体をメモリに入れたくないので、この方法は少し悪いでしょう。-veskip パラメータに値を指定したくありません。

また

rows = collection.find(sort={'$natural':-1}, limit=LIMIT_VAL)

ここで、自然な並べ替え順序に本当に依存できないことを読みました。信頼できない理由がわからない

また

order_of_insert という値を各レコードに挿入し、それを並べ替えて、挿入した方法を確実に取得します。

これを実装する前に、どの方法が最適かを確認する必要がありました。

4

1 に答える 1

1

Mongodb ObjectIDは、秒まで正確なタイムスタンプ情報を格納します。$ naturalは、この_idでソートします。アプリが同じ秒内にドキュメントを挿入する場合、挿入順序はあいまいになります。$ naturalは、コレクションに上限が設定されている場合にのみ、挿入順序に対応します。

  1. アプリケーションがほぼ正確な挿入順序を許容でき、データを永続的に保持する必要がある場合は、コレクションに上限を設定せずに$naturalを使用してください。
  2. 正確な挿入順序が必要で、データセットが小さい/半永続的である場合は、コレクションに上限を設定し、$naturalソートを使用します
  3. それ以外の場合は、順序を追跡するために、独自のタイムスタンプまたはその他のフィールドで並べ替える必要があるようです。
于 2012-11-04T02:52:42.423 に答える