在我的应用程序中,我有一个端点,该端点应该找到满足某些条件的所有用户,然后以数组形式返回结果。结果按创建日期排序。现在,我需要进行更复杂的排序。
1)返回首先上传个人资料照片的用户(这是我必须添加的主要条件)2)此外,结果应按创建日期排序,但头像上传的用户应始终优先(尽管他们已经创建了)稍后再登录)
这是我的代码:
router.get('/users/:page?', ({ params, query }, response) => {
let { page = 1 } = params;
page = _.parseInt(page);
let { limit = 50 } = query;
limit = _.parseInt(limit);
const skip = page * limit - limit;
User.find({ name: { $exists: true }})
.limit(limit)
.skip(skip)
.sort({ created: 1 })
.exec((error, users) => {
if (error) {
return response.status(500).send('users-couldnt-be-found');
}
response.status(200).send(users);
});
});
我的示例json集合:
[
{ name: 'Jon without avatar', created: '2020-01-28T22:29:48.603Z' }
{ name: 'Jon with avatar', avatar: '/path/to/file', created: '2020-01-28T22:29:48.603Z' }
]
我尝试使用aggregate
,group
但是我不太了解它是如何工作的。我将不胜感激。
您可以使用聚合管道。
[
{$project: {
_id: 1,
created: 1,
avatar: 1,
avatarExists: {
$cond: [
{$ifNull: ["$avatar", false]},
1,
0
]
}
}},
{$sort: {
avatarExists: -1,
created: 1
}}]
$ project阶段添加一个新字段,以指示该化身是否存在。$ sort阶段首先对化身是否存在进行排序,然后对创建日期进行排序。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句