Если это моя структура коллекции:
{ "_id": ObjectId("4fdbaf608b446b0477000142"), "name": "product 1", }, { "_id": ObjectId("fghfghfgjhjghkgk"), "name": "product 2", }, { "_id": ObjectId("fghfghfgjhjghkgk"), "name": "product 3", }
и я запрашиваю продукт 1, есть ли способ запросить следующий документ, который в этом случае будет продуктом 2?
Лучше всего добавить явные критерии sort()
если вы хотите предсказуемый порядок результатов.
Предполагая, что заказ после вас – это «порядок вставки», и вы используете созданные ObjectIds по умолчанию созданные MongoDB, вы можете запросить на основе ObjectId:
// Find next product created db.products.find({_id: {$gt: ObjectId("4fdbaf608b446b0477000142") }}).limit(1)
Обратите внимание, что этот пример работает только потому, что:
_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
Если вы хотите вернуть их в каком-то другом порядке, вам нужно будет определить, что это за заказ, и хранить дополнительную информацию в ваших документах.