Поиск следующего документа в MongoDb

Если это моя структура коллекции:

{ "_id": ObjectId("4fdbaf608b446b0477000142"), "name": "product 1", }, { "_id": ObjectId("fghfghfgjhjghkgk"), "name": "product 2", }, { "_id": ObjectId("fghfghfgjhjghkgk"), "name": "product 3", } 

и я запрашиваю продукт 1, есть ли способ запросить следующий документ, который в этом случае будет продуктом 2?

Solutions Collecting From Web of "Поиск следующего документа в MongoDb"

Лучше всего добавить явные критерии sort() если вы хотите предсказуемый порядок результатов.

Предполагая, что заказ после вас – это «порядок вставки», и вы используете созданные ObjectIds по умолчанию созданные MongoDB, вы можете запросить на основе ObjectId:

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

Обратите внимание, что этот пример работает только потому, что:

  • первые четыре байта ObjectId вычисляются из метки времени в стиле unix (см. спецификацию ObjectId )
  • запрос на _id будет использовать индекс _id по умолчанию (отсортированный по id), чтобы найти совпадение

Итак, этот неявный вид такой же, как:

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

Если вы добавили больше критериев для запроса, чтобы узнать, как найти «следующий» продукт (например, category ), запрос может использовать другой индекс, и порядок может быть не таким, как вы ожидаете.

Вы можете проверить использование индекса с помощью функции explain () .

Вы можете вернуть элементы в порядок вставки с помощью ObjectId. См .: http://www.mongodb.org/display/DOCS/Optimizing+Object+IDs#OptimizingObjectIDs

Если вы хотите вернуть их в каком-то другом порядке, вам нужно будет определить, что это за заказ, и хранить дополнительную информацию в ваших документах.