如何对对象数组node.js和mongoose进行排序

时间:2019-01-25 13:40:10

标签: node.js mongodb mongoose

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

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

我尝试过这样的事情:

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

但是出现以下错误:

  

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

如果我在mongodb(罗盘)中按此顺序具有对象ID

_id:123456789

_id:987654321

我希望_id 987654321在列表中首先显示。

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

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

1 个答案:

答案 0 :(得分:0)

From mongoose doc on sort

  

如果传递了一个对象,则允许的值为asc,desc,ascending,descending,1和-1。

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

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

如果它不能按预期的方式工作,则还可以传递字符串而不是像这样的对象:Product.findById(productId) .sort('requests._id')Product.findById(productId) .sort('-requests._id')