2017-03-03 7 views
0

mongodbとmongooseを使ってアプリケーションを開発しています。私は、フィールドを以下ましたコレクションという名前の製品があります。mongodb nodejの2つのフィールドでソートする

{ 
color:String, 
sizes: [{type: String}], 
gender: String, //can be women/men/kids 
price: { 
    type: Number, required: true, min: 0 
    }, 
likes: {type: Number, default: 0}, 
views: {type: Number, default: 0}, 
} 

を、私は、サイズLで文書をフィルタリングしても好きにソート降順と価格でソートを昇順実行するために集計を使用したいです。 ここで私が使用しているクエリです:

aggregate([{$match:{sizes:['L']}},{$sort:{price:1,likes:-1}}]) 

が、私はたったの$の並べ替えオブジェクトの最初のフィールドで文書をソート結果を取得し、それは価格であると彼らが好きで並べ替えられていません。 何が問題なのですか?私はさまざまなフィールドと注文を試みたたびに、同じ結果が得られました。

+0

クレームをサポートするためにサンプルをデータに投稿できますか? 'sort()'のデフォルトの振る舞いは、指定した最初のフィールドでソートし、2つ目のフィールドの最初のフィールドが等しいときに2番目のフィールドを使用してソートします。つまり、ドキュメントは 'likes'によってのみソートされます。if彼らの「価格」は同じです。 –

+0

どのように私は2つのフィールドでドキュメントを並べ替えることができますか?2つ以上のfields.isそこにプラグインやメソッドですか? –

答えて

0

はMongoDBのドキュメントによると、使用

enter image description here

$ソート方法が正しい形式になっていhttps://docs.mongodb.com/manual/reference/operator/aggregation/sort/で、あなたがソートしたいレコードに任意の同類を持っているあなたは確かにありますか? MongoDBが使用しているフォーマットをサポートしているかどうかも確認してください。下の例はあなたのものとほとんど同じですが、サイズの単純化されたクエリでは、sizes配列に単なる文字列が含まれているときに["L"]する必要はありません。

db.collection.aggregate([ 
    { 
     "$match": { 
      "sizes": "L" 
     } 
    }, 
    { 
     "$sort": { 
      "price": 1, 
      "likes": -1 
     } 
    } 
]) 
関連する問題