【问题标题】:mongodb sorting by two fields in nodejsmongodb按nodejs中的两个字段排序
【发布时间】:2017-03-03 18:22:19
【问题描述】:

我正在使用 mongodb 和 mongoose 来开发应用程序。我有一个名为 product 的集合,其中包含以下字段:

{
 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}}])

但我得到的结果是仅按 $sort 对象中的第一个字段对文档进行排序,即价格,它们不是按喜欢排序的。 所以有什么问题?我尝试了不同的字段和顺序,每次都得到相同的结果。

【问题讨论】:

  • 您能否将样本发布到数据中以支持您的主张。 sort() 的默认行为是按您提供的第一个字段进行排序,并在要匹配的 2 个文档的第一个字段相等时使用第二个字段进行排序,即文档将仅按 likes 排序,如果他们的@ 987654325@也一样。
  • 那么如何按两个字段对文档进行排序?或两个以上字段。是否有任何插件或方法?

标签: node.js mongodb sorting mongoose


【解决方案1】:

根据 https://docs.mongodb.com/manual/reference/operator/aggregation/sort/ 的 MongoDB 文档

您使用的$sort 方法格式正确,您确定在要排序的记录中有任何喜欢吗?还要检查您的 MongoDB 版本是否支持您正在使用的格式。下面的例子和你的几乎一样,只是简化了sizes查询,当sizes数组只包含字符串时,你不需要做[“L”]。

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

【讨论】:

    猜你喜欢
    • 2019-03-19
    • 2015-01-20
    • 1970-01-01
    • 1970-01-01
    • 2021-11-03
    • 2020-03-04
    • 1970-01-01
    • 1970-01-01
    • 2013-04-26
    相关资源
    最近更新 更多