我有元素的列表MongoDB中有created_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])
但在這種情況下。我跳過所有文件與2所以我用「$ GTE」有這個文件nb_likes
獲得以前
db.users.find({'nb_likes':{'$gte':2}}).sort(['nb_likes':-1])
獲得下一
db.users.find({'nb_likes':{'$lte':2}}).sort(['nb_likes':1])
但在這種情況下。第二個元素總是返回。在next和previous元素中。
如果我只限制與「created_at」少跌多文檔比我的文件我刪除一些文件與更多的「nb_likes」,但一個老「created_at」
所以我不知道什麼要求,我需要做的有良好的回報。
一個很好的解決方案是有這個文件的位置在我的完整列表,並做了skip()
和limit(1)
我向所有人開放的好辦法。我不知道在SQL中我們是否可以有相同的問題。
爲什麼id爲1235元就是1236元 '前'? –
默認情況下,第二個排序是關於:created_at你可以使用sort(['nb_likes': - 1],['created_at':1])來模擬它。'當兩個元素的順序相同時默認是這樣做的 – shingara
什麼是Mongo查詢獲取您給出的有序列表(文檔)作爲示例?如果您的nb_likes大於2且id小於document_id,則 –