Arrays mongodb对排序字段选项进行动态查询

Arrays mongodb对排序字段选项进行动态查询,arrays,json,node.js,mongodb,mongoose,Arrays,Json,Node.js,Mongodb,Mongoose,我使用聚合查询来显示给定代码片段的一些结果 if (name) { sort = { '$sort': { name: -1 } } } else { sort = '' } User.aggregate([sort, { $match: {} }]) 问题是当名称的值未设置时,聚合查询给出了如何在nodejs中使此聚合查询动态的错误。根据用户选择的过滤器,我需要在任何地方安装排序选项。这应该可以: var query = [{ $match: {} }] if

我使用聚合查询来显示给定代码片段的一些结果

if (name) {
  sort = { '$sort': { name: -1 } }
} else {
  sort = ''
}

User.aggregate([sort, { $match: {} }])
问题是当名称的值未设置时,聚合查询给出了如何在nodejs中使此聚合查询动态的错误。根据用户选择的过滤器,我需要在任何地方安装排序选项。

这应该可以:

var query = [{
    $match:   {}    
}]

if(name)
{
    query.unshift({ '$sort': { name: -1 } });
}

User.aggregate(query)
这应该起作用:

var query = [{
    $match:   {}    
}]

if(name)
{
    query.unshift({ '$sort': { name: -1 } });
}

User.aggregate(query)

我不能这样做,因为我有聚合管道,我需要在任何地方安装排序选项,query.push最终将推送排序选项。如果(name){query.unshift({'$sort':{name:-1}});}它也不起作用,而不是在数组的开头添加排序管道,有时我需要把排序放在开头,有时放在结尾。我做不到这一点,因为我有聚合管道,我需要将排序选项放在任何地方,query.push将把排序选项放在末尾。如果(name){query.unshift({'$sort':{name:-1}}),使用push代替push,将排序管道添加到数组的开头
if(name){query.unshift({'$sort':{name:-1});}
它也不起作用,有时我需要在开始或结束时进行排序。