2016-06-27 3 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 sortmongo indexes