2017-03-03 56 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 
     } 
    } 
])