Javascript mongoose中的自定义排序功能

Javascript mongoose中的自定义排序功能,javascript,arrays,mongodb,Javascript,Arrays,Mongodb,我有以下代码: .find(callback).limit(limit).sort({id:-1}) 实际上,这很有魅力但是,少数收藏可能有已批准的字段未定义的(可能不存在)。如果是,则应将其移动到列表的末尾 问题:我是否可以只传递给该排序函数而不是该对象{id:-1} 我的自定义排序功能: const o=[{ id:4, 批准:对, }, { id:1, 批准:对, }, { id:2, 批准:对, }, { id:3, }]; 常数r=o.sort((a,b)=>{ 返回b.approv

我有以下代码:

.find(callback).limit(limit).sort({id:-1})

实际上,这很有魅力但是,少数收藏可能有
已批准的
字段
未定义的
(可能不存在)。如果是,则应将其移动到列表的末尾

问题:我是否可以只传递给该
排序
函数而不是该对象
{id:-1}

我的自定义排序功能:

const o=[{
id:4,
批准:对,
}, {
id:1,
批准:对,
}, {
id:2,
批准:对,
}, {
id:3,
}];
常数r=o.sort((a,b)=>{
返回b.approved?b.id-a.id:b;
});
控制台日志(r)不,那不是问题。您不能返回
b
对象,您应该只检查
b.approved

相反,使用

arr.sort((a, b) => {
    return !!b.approved - !!a.approved || b.id - a.id;
});

这并不能真正回答这个问题,因为无论如何都不能使用JS函数对mongodb进行排序。@JohnnyHK哦,你可能是对的。我不知道mongodb,但是OP在他的问题中谈到了函数和使用的数组……但是你肯定可以让mongodb通过
批准
,然后通过
id
?当然,但是OP希望定制你可以得到的标准排序。亲爱的Bergi,您的解决方案将未经
批准的元素下移到列表中,但是这些已批准的元素排序不正确:(只是随机的……其中一些得到了
approved=true
,一些得到了
approved=false
。你给我的解决方案很好,我的意思是,它将
approved=false
的元素推到列表的下方,但是
approved=true
的元素没有正确排序(它们应该按
id
排序)(实际上是
date
,但我更容易用
id
重现问题)您可以使用
aggregate
来实现这一点,方法是投影一个自定义值进行排序,然后在该值上排序。如果在
{approved:-1,id:-1}上进行排序,看看会发生什么
?考虑到未定义的字段比布尔值小,这应该可以工作。已确认
db.getCollection(“”).find().sort({approved:-1,id:-1})
返回了OP想要的内容。@Akrion它确实在最后移动了未经
批准的元素
,但是带有
批准的
字段的元素排序不正确。你知道为什么吗?好的,知道了。你应该在问题中指定所有内容。到这里需要一些猜测工作