如何使用Mongoose对对象数组中的对象数组的内容进行排序

djmepvbi  于 2022-11-13  发布在  Go
关注(0)|答案(1)|浏览(214)

这是我的数据:

User: [
   {
      username: 'Alice',
      hobbies: [
         { place: 'garden',
           tool: 'scissors'
         },
         {
           place: 'montain',
           tool: 'coat'
         }
      ]
   },
   {
      username: 'Joe',
      hobbies: [
         { place: 'garden',
           tool: 'scissors'
         }
      ]
   }
]

我尝试提取用户'Alice'的'爱好'并按'地点'排序。我需要使用MongoDB/Mongoose函数进行排序,而不是像.sort((a,b)=〉a.url〉b.url?1:-1)的值。
我有一个这样的函数:

async function findPlaceSort(username, sortElement, sortDirection) {
   const sortedPlaces = await User.findOne({username: username})
                                  .hobbies
                                  .sort({[sortElement]: sortDirection});
   return sortedPlaces;
}

我用**findPlaceSort('Alice','place',1)**调用该函数
我试过很多种都没有成功。

rseugnpd

rseugnpd1#

如果你使用的mongoDB版本〉= 5.2,你可以在一个投影中使用$sortArray操作符,简单地使用下面的代码来实现:

User.findOne({username: username}).project({
  hobbies: {
    $sortArray: { input: "$hobbies", sortBy: { place: 1 } }
  }
});

相关问题