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

MongoDBのID周辺のドキュメントの範囲を返す

    ObjectIDの をご存知ですか タイムスタンプが含まれていますか?したがって、それらは常に自然な挿入順序を表します。したがって、既知のドキュメントの前にあるドキュメントを探している場合は、_id あなたはこれを行うことができます:

    私たちの文書:

    { "_id" : ObjectId("5307f2d80f936e03d1a1d1c8"), "a" : 1 }
    { "_id" : ObjectId("5307f2db0f936e03d1a1d1c9"), "b" : 1 }
    { "_id" : ObjectId("5307f2de0f936e03d1a1d1ca"), "c" : 1 }
    { "_id" : ObjectId("5307f2e20f936e03d1a1d1cb"), "d" : 1 }
    { "_id" : ObjectId("5307f2e50f936e03d1a1d1cc"), "e" : 1 }
    { "_id" : ObjectId("5307f2e90f936e03d1a1d1cd"), "f" : 1 }
    { "_id" : ObjectId("5307f2ec0f936e03d1a1d1ce"), "g" : 1 }
    { "_id" : ObjectId("5307f2ee0f936e03d1a1d1cf"), "h" : 1 }
    { "_id" : ObjectId("5307f2f10f936e03d1a1d1d0"), "i" : 1 }
    { "_id" : ObjectId("5307f2f50f936e03d1a1d1d1"), "j" : 1 }
    { "_id" : ObjectId("5307f3020f936e03d1a1d1d2"), "j" : 1 }
    

    したがって、_idがわかります 「f」の、それと次の2つのドキュメントを取得します:

    > db.items.find({ _id: {$gte: ObjectId("5307f2e90f936e03d1a1d1cd") } }).limit(3)
    
    { "_id" : ObjectId("5307f2e90f936e03d1a1d1cd"), "f" : 1 }
    { "_id" : ObjectId("5307f2ec0f936e03d1a1d1ce"), "g" : 1 }
    { "_id" : ObjectId("5307f2ee0f936e03d1a1d1cf"), "h" : 1 }
    

    そして、逆に同じことをします:

    > db.items.find({ _id: {$lte: ObjectId("5307f2e90f936e03d1a1d1cd") } })
        .sort({ _id: -1 }).limit(3)
    { "_id" : ObjectId("5307f2e90f936e03d1a1d1cd"), "f" : 1 }
    { "_id" : ObjectId("5307f2e50f936e03d1a1d1cc"), "e" : 1 }
    { "_id" : ObjectId("5307f2e20f936e03d1a1d1cb"), "d" : 1 }
    

    そしてそれは大いに コレクションをスキャンするよりも優れたアプローチです。



    1. 多くのメモリを使用するMongoDB

    2. Spring-mongodb--aggregation-'cursor'オプションが必要です

    3. Express node.jsコントローラーがデータ操作を待機せず、古いデータを返す

    4. mongodb $ in limit