2016-06-27 137 views
2

我正在嘗試在貓鼬中創建一個排行榜,並且有問題按升序分數索引我的分數模式。按分數分配的貓鼬索引

這裏是我的代碼:

db.once('open', function callback() { 
console.log('Successfully connected to MongoDB'); 
var scoresSchema = new Schema ({ 
    score: Number, 
    user: String 
}, {autoIndex: false}); 

scoresSchema.index({ user: 1, score: -1 }); 

StatScore = mongoose.model('Score', scoresSchema); 
}); 

而且它的輸出如下

[ { _id: 57715497860521f404cfebf0, score: 87, user: 'seth', __v: 0 }, 
    { _id: 577157151f39c2320548e6e5, score: 99, user: 'seth', __v: 0 }, 
    { _id: 57716a4613e701890608d18a, score: 97, user: 'seth', __v: 0 }, 
    { _id: 57716a7413e701890608d18b, score: 135, user: 'john', __v: 0 } ] 

爲什麼它沒有正確排序任何想法?我一直在看其他的工作和例子,並且看不到我會出錯的地方。

+0

排序和索引不是一回事。 http://stackoverflow.com/questions/25449570/mongoose-default-sorting-order –

+0

@BrianGlaz我明白,但我想索引我的數據,以便每次保存一個新的條目,它會保存在降序得分爲了讓我始終將我的數據庫的前10個分數作爲前10個分數。 – KI17

回答

1

你的問題並不完全清楚,如果你把你的問題放在你的問題上,可能會有用。但在這裏你有一些可以幫助你的線索。

  • 您必須意識到您正在創建一個複合索引。這意味着索引將以用戶作爲第一參數,然後得分
  • 請確保您撥打排序方法。通常認爲索引會保持我們在磁盤上訂購的收藏。這不是真的。您可以將索引視爲集合上文檔引用的表格,該集合根據您在索引配置上設置的內容進行排序。因此,儘管您已將索引配置爲按得分排序,但這並不意味着該集合將在磁盤中進行排序,並且當您執行查詢獲取所有內容時,它將按照數據的順序顯示在收集中找到並不需要您想要的訂單。

希望這對你有幫助。

另外,你可以閱讀關於mongo上我發現有用的排序和索引的文檔:mongo sort,mongo indexes