mongodb Mongoose 按栖息地分类

rqdpfwrv  于 2022-11-03  发布在  Go
关注(0)|答案(1)|浏览(88)

在我的Task模式中,我有如下字段:

{
  name: String
},
{
  user: ObjectID
}

我需要对任务进行排序。如果我想按name字段进行排序,这很简单:

await Tasks.find().sort({name: 1})

这是可行的。但问题是当我想按user.name排序时。要从User获取字段,我可以填充它们,因此:

await Tasks.find().populate('user', 'name').sort({'user.name': 1})

它不起作用。我不能按populate函数添加的字段排序。我在文档和其他用户的问题中搜索了很多。我发现我可以将排序选项传递给populate函数,但它也不起作用。我猜它会对填充字段中的字段排序。
当我尝试使用聚合和查找时,如下所示:

Tasks.aggregate([{ $lookup: {
{
   from: 'User',
   localField: 'user',
   foreignField: '_id',
   as: 'someField'
 }}}])

它返回someField: []
有人能帮帮我吗?谢谢!

sg3maiej

sg3maiej1#

aggregate查询中,您应该使用集合的真实的名称来引用集合,而不是使用模型名称。因此,它应该是from: 'users'而不是from: 'User'

Tasks.aggregate([
  { 
    $lookup: {
      from: 'users',
      localField: 'user',
      foreignField: '_id',
      as: 'user'
    }
  },
  {
    $set: {
      user: { $first: '$user' }
    }
  },
  {
    $sort: {
      'user.name': 1 
    }
  }
])

相关问题