sql >> データベース >  >> NoSQL >> MongoDB

Mongodbfindの返されるドキュメントの順序

    ドキュメントは自然な順序で保存されます

    ドキュメントは、日付に基づいて降順で保存されます。したがって、コレクションには最初のドキュメントとして20140731が含まれています。

    上限付きのコレクションを使用している場合を除き、ディスク上のドキュメントの順序(自然順序とも呼ばれます)は保証されません。

    ドキュメントの削除と移動(ドキュメントが割り当てられたレコードスペースを超えた場合)は、再利用される空きリストにスペースを作成します。

    これは、mongoでこれを示す簡単な例です。 シェル:

    // Start with an empty database & collection
    use demodb; db.dropDatabase(); db.order.drop()
    
    // Add some test data
    for (i=0; i<1000; i++) {
        db.order.insert({'i': i})
    }
    
    // Looks like insertion order! (0..9)
    db.order.find({}).limit(10);
    
    // Pause 5s for effect :)
    sleep(5000);
    
    // Remove half the entries
    db.order.remove({ i: { $lt: 500 }})
    
    // Re-add the missing entries
    for (i=0; i<500; i++) {
        db.order.insert({'i': i})
    }
    
    // Not the entries you expected .. space from deleted records was reused
    db.order.find({}).limit(10)
    
    // Clean up demodb
    db.dropDatabase()
    
    結果の順序

    フィルタ{$gte:20140720、$ lte:20140731}でfindコマンドを使用すると、mongodbは「日付」フィールドの昇順でクエリを返します。

    クエリにインデックスが使用されている場合、ドキュメントはインデックスで見つかった順序で返されます。一般的なクエリのインデックスを作成するときは、これを利用する必要があります(「インデックスを使用してクエリ結果を並べ替える」を参照)。

    参考までに、単純なインデックス(例:{date:1} )を使用して、昇順または降順で並べ替えられた結果を返すことができます。

    ObjectIDで並べ替え

    _idにMongoDBのデフォルトのObjectIDを使用している場合 、{ _id: 1 }で並べ替えることができます ObjectIDの最初の4バイト以降の挿入順序を概算する タイムスタンプを組み込みます。これを使用して、dateに基づいてクエリを並べ替える場合 {date:1, _id:1}のインデックスを確保するおおよその挿入順序 。

    ObjectIDに注意してください sは通常、クライアントドライバーによって生成されるため、アプリサーバー(または_id)にクロックドリフトがある場合 ドキュメントが挿入される少し前に作成されます)ObjectID ■サーバーから見た「挿入順序」を厳密に反映していない場合があります。挿入順序の正確さが非常に重要な場合は、通常、_idを生成できます。 サーバー側(アプローチはドライバーによって異なります)。




    1. MongoDB$type集約パイプライン演算子

    2. nosqlとの多対多の関係(mongodbおよびmongoose)

    3. MongoDB $ isArray

    4. pyarrowを使用してPandasデータフレームをRedisに設定/取得する方法