Finding The Next Document in MongoDb

后端 未结 2 948
终归单人心
终归单人心 2021-01-05 08:51

If this is my collection structure:

{   \"_id\": ObjectId(\"4fdbaf608b446b0477000142\"),
    \"name\": \"product 1\",
},
{   \"_id\": ObjectId(\"fghfghfgjhjg         


        
2条回答
  •  耶瑟儿~
    2021-01-05 09:24

    It is best to add explicit sort() criteria if you want a predictable order of results.

    Assuming the order you are after is "insertion order" and you are using MongoDB's default generated ObjectIds, then you can query based on the ObjectId:

    // Find next product created
    db.products.find({_id: {$gt: ObjectId("4fdbaf608b446b0477000142") }}).limit(1)
    

    Note that this example only works because:

    • the first four bytes of the ObjectId are calculated from a unix-style timestamp (see: ObjectId Specification)
    • a query on _id alone will use the default _id index (sorted by id) to find a match

    So really, this implicit sort is the same as:

    db.products.find({_id: {$gt: ObjectId("4fdbaf608b446b0477000142" )}}).sort({_id:1}).limit(1);
    

    If you added more criteria to the query to qualify how to find the "next" product (for example, a category), the query could use a different index and the order may not be as you expect.

    You can check index usage with explain().

提交回复
热议问题