2017-02-08 3 views
0

MEANスタックアプリケーションの開発には、複数の種類のメディア(写真、ビデオ、Webコンテンツスナップショットなど)とテキストが必要です。Mongodbコレクションデータの並べ替えクエリ

特定のフィールドに並べ替えクエリを適用することによって、特定の順序でコレクションをソートする必要がありました。

ソート順:

- 0:Text, 1:Photo, 2:Video, 3:Web-content-snapshot 
- 1:Photo, 2:Video, 3:Web-content-snapshot, 0:Text 
- 2:Video, 1:Photo, 3:Web-content-snapshot, 0:Text 
- 3:Web-content-snapshot, 2:Video, 1: Photo, 0:Text 

コレクション:

var mediaSchema = new Schema({ 
    user_id: {type: Schema.Types.ObjectId,ref: 'User'}, 
    // media description 
    description: {type: String}, 
    // Media type: 1: image, 2: video, 3: Web content snapshot, 0: Text 
    media_type: {type: Number,default: 0,index: true}, 
    media_name: {type: String}, 
    snapshot_url: {type: String}, 
    snapshot_content: {type: String}, 
    Text: {type: String} 
}, 
{collection: 'media'}); 

親切media_typeこの上でクエリを並べ替え適用する方法を私を導くので、私は上記のメディアを取得することができますソート説明注文。私はmongooseの質問にmongooseモジュールを使用しています。

答えて

1

あなたはmedia_typeするだけで順序(ASC/DESC)したい場合は、cursor.sort()を使用することができます。

# MongoDB native 
db.media.find().sort({media_type: 1}) # or -1 

# Mongoose way 
MediaModel.find().sort({media_type: 1}).exec() # or -1 

しかし、カスタム/複雑なソートの基準を適用したい場合は、MongoDBの中で、あなたはそれをクライアントをしなければなりません(またはサーバー側でeval()を使用)。

パイプライン演算子であるは、引数としてドキュメントオブジェクトのみを受け入れます。

# MongoDB shell native 
db.media.find().toArray().sort(customCompare); 

# Mongoose way 
MediaModel.find().exec() 
    .then(medias => medias.sort(customCompare)) 
    .then(sortedMedias => console.log(sortedMedias)); 

# Compare function should return <=-1 | 0 | >=1 
function customCompare(media1, media2) { 
    return media1.media_type - media2.media_type 
} 
関連する問題