У меня есть список элементов в MongoDB с данными create_at и nb_likes, как в этом случае:
[{'_id':'1234', 'nb_likes':1, 'created_at':'2010-08-01'},
{'_id':'1235', 'nb_likes':2, 'created_at':'2010-08-02'},
{'_id':'1236', 'nb_likes':2, 'created_at':'2010-08-03'},
{'_id':'1237', 'nb_likes':3, 'created_at':'2010-08-02'},
{'_id':'1238', 'nb_likes':3, 'created_at':'2010-08-03'}]
Если я отсортирую эту коллекцию по порядку 'nb_likes'.
db.users.find().sort(['nb_likes':-1])
Но я хочу найти предыдущий и следующий элемент документа '1236', если я закажу 'nb_likes'.Если мы видим коллекцию, предыдущий элемент - это документ «1235», а следующий «1237».Но если я хочу сделать запрос, чтобы узнать предыдущий и следующий элемент, я делаю:
, чтобы получить предыдущий
db.users.find({'nb_likes':{'$gt':2}}).sort(['nb_likes':-1])
, чтобы получить следующий
db.users.find({'nb_likes':{'$lt':2}}).sort(['nb_likes':1])
Но в этомдело.Я пропускаю весь документ с nb_likes с 2. Поэтому я использую $ gte, чтобы получить этот документ
, чтобы получить предыдущий
db.users.find({'nb_likes':{'$gte':2}}).sort(['nb_likes':-1])
, чтобы получить следующий
db.users.find({'nb_likes':{'$lte':2}}).sort(['nb_likes':1])
Но в этом случае.второй элемент всегда возвращается.в следующем и предыдущем элементе.
Если я ограничиваю только документ с «create_at» меньше или больше, чем мой документ, я удаляю некоторый документ с большим количеством «nb_likes», но со старым «made_at»
Такне могу знать, какой запрос мне нужно сделать, чтобы получить хороший возврат.
Хорошее решение - указать позицию этого документа в моем полном списке и сделать skip()
и limit(1)
Я открыт ко всему хорошему решению.Я не могу знать, может ли быть в SQL такая же проблема или нет.