【问题标题】:how to sort array of objects node.js and mongoose如何对对象数组node.js和猫鼬进行排序
【发布时间】:2019-06-19 08:35:49
【问题描述】:

我有一个要排序的对象数组。根据文档,顶层的 .sort() 工作方式如下:

Product.findById(productId)
.sort({ somefield: -1 })

我尝试过这样的事情:

 Product.findById(productId)
 .sort( { requests: { _id: -1 } } )

但我收到以下错误:

TypeError:无效的排序值:{请求:[object Object]}

如果我在 mongodb (compass) 中有这个顺序的对象 ID

_id:123456789

_id:987654321

我希望 _id 987654321 显示在列表的首位。

我现在什至添加了一个日期字段并尝试按此排序,但顺序仍然与插入记录的顺序相同。

  Product.findById(productId)
  .sort( { 'requests.requestDt': 1} )

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    From mongoose doc on sort:

    如果传递一个对象,则允许的值为 asc、desc、升序、降序、1 和 -1。

    您传递的值是一个对象{ _id: -1 },它只需要-1(或其他有效值之一)。如果您将键更改为要排序的项目的完整路径,那应该可以解决您的问题。

    Product.findById(productId) .sort( { 'requests._id': -1 } )

    如果它没有按您预期的方式工作,您也可以传递一个字符串而不是这样的对象:Product.findById(productId) .sort('requests._id')Product.findById(productId) .sort('-requests._id')

    【讨论】:

    • 谢谢,没有错误,但没有按我想要的方式排序。它应该是列表中的最后一个 _id。
    • 虽然这段代码 sn-p 可以解决问题,including an explanation 确实有助于提高您的帖子质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
    • @pmar,感谢您的努力。我已经编辑了我的问题以显示我想如何对数据进行排序。我尝试了你所有的例子,但它仍然按照我想要的相反顺序排序。我也尝试了 1 而不是 -1 并且结果相同
    猜你喜欢
    • 1970-01-01
    • 2014-03-10
    • 1970-01-01
    • 2013-10-26
    • 2018-11-28
    • 2022-01-20
    • 2014-02-22
    • 2020-12-18
    • 2015-06-20
    相关资源
    最近更新 更多