【问题标题】:Sort in MongooseJS 3.3.1 in ascending and descending order在 MongooseJS 3.3.1 中按升序和降序排序
【发布时间】:2012-10-30 23:47:15
【问题描述】:

我在 NodeJS 和 MongooseJS ODM 中有基于 REST 的 API。要GET部门 URL 列表是 http://localhost:25718/Department?SortBy=Name&SortType=asc(desc-表示降序)。排序代码是

 var Query = Department.find();
 if(req.query.SortBy) {
        Query.sort(req.query.SortBy, 1);
        if(req.query.SortType) {
            if(req.query.SortType.toLowerCase() == 'desc') {
                Query.sort(req.query.SortBy, -1);
            }
        }
    }

此剂量不适用于 MongooseJS 3.3.1。 Query.sort(req.query.SortBy) 以升序排序。但不会以任何方式降序。 请给出解决方案。

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    我无法重现您遇到的问题。我想说发布有关您正在查询的集合的信息以及您对它的索引。

    我确实重写了您的代码以更易于阅读:

    var Query = Department.find(),
        sortBy = req.query.SortBy,
        sortType = (req.query.SortType || 'asc').toLowerCase();
    
    if (sortBy && sortType === 'asc') {
        Query.sort(sortBy, 1);  
    } else if (sortBy && sortType === 'desc') {
        Query.sort(sortBy, -1);
    }
    

    更新(2012-10-30)

    我刚刚意识到排序函数的语法不正确。请查看更正后的代码。

    var Query = Department.find(),
        sortBy = req.query.SortBy,
        sortType = (req.query.SortType || 'asc').toLowerCase();
    
    if (sortBy && sortType === 'asc') {
        Query.sort(sortBy); // firstname
    } else if (sortBy && sortType === 'desc') {
        Query.sort('-'+sortBy); // -firstname
    }
    

    请参阅http://mongoosejs.com/docs/api.html#query_Query-sort 了解排序参数语法。

    【讨论】:

    • 重写的代码给了我同样的错误 500 TypeError: Invalid sort() 参数。必须是字符串或对象。 我使用的是 Mongoose 3.3.1 ODM,目前的语法是错误的,我尝试了不同的语法,甚至是文档中的语法,但没有得到排序。因为默认是 升序 , Query.sort(sortBy); 是按升序返回的,怎么降序呢?
    • 我更新了代码以使用正确的排序函数语法。让我知道它是否有效。
    【解决方案2】:

    【讨论】:

    • 使用我的代码时出现错误:_500 TypeError:Invalid sort() 参数。必须是字符串或对象_。我在文档中尝试了代码。我的代码 field = req.query.SortBy; type = (req.query.SortType||'asc').toLowerCase(); if (field&&type==='asc') { Query.sort({field:'asc', type:1}); }else if(field&&type==='desc'){ Query.sort({field:'desc', type:-1}); } also if (field&&type==='asc') { Query.sort('field type'); }else if(field&&type==='desc'){ Query.sort('field -type'); } 但它没有按排序顺序返回。
    • 而不是 req.query.SortByfield Query.sort({ Name: 1 });Query.sort({ Name: -1 }); 提供升序和降序排序。这里 Name 是字段的名称。模型有 'n' 个字段(如名称、描述、地址...),因此字段名称不能静态指定,它会在运行中更改time.如何在运行时给出字段名称?由于默认排序是升序,Query.sort(req.query.SortBy); 给出升序排序,问题是降序排序。请提出解决方案。
    猜你喜欢
    • 2012-11-08
    • 2023-03-07
    • 1970-01-01
    • 2017-11-16
    • 1970-01-01
    • 2011-08-25
    • 2021-01-23
    • 2018-11-20
    • 2015-03-09
    相关资源
    最近更新 更多