2017-03-03 65 views
0

使用mongodb和mongoose開發應用程序。我有一個具有以下字段的集合命名的產品:mongodb通過nodejs中的兩個字段排序

{ 
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()的默認行爲是按照你提供的第一個字段進行排序,當第一個字段匹配的時候使用第二個字段進行排序,即如果文檔只按'likes'排序if他們的「價格」是一樣的。 –

+0

所以我怎麼能按兩個字段或兩個以上的字段排序文件。有沒有插件或方法? –

回答

0

據MongoDB的文檔在https://docs.mongodb.com/manual/reference/operator/aggregation/sort/

enter image description here

$您使用的排序方法有正確的格式,你確定你有記錄的任何喜歡要排序?另外檢查你的MongoDB是否支持你正在使用的格式。以下示例與您的示例幾乎相同,只是簡化大小查詢,當大小數組僅包含字符串時,不需要製作[「L」]。

db.collection.aggregate([ 
    { 
     "$match": { 
      "sizes": "L" 
     } 
    }, 
    { 
     "$sort": { 
      "price": 1, 
      "likes": -1 
     } 
    } 
])