Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript mongoose/mongodb查询多排序_Javascript_Mongodb_Mongoose - Fatal编程技术网

Javascript mongoose/mongodb查询多排序

Javascript mongoose/mongodb查询多排序,javascript,mongodb,mongoose,Javascript,Mongodb,Mongoose,我对mongodb很陌生。我设法得到了一个简单排序的基本概念,它只基于一个参数。如果有两个以上的排序参数,该怎么办。例如,在由具有属性totalCuttingTime和favorited的木工项目组成的数据库中 以下是一个正确的mongoose/mongodb函数,用于查找具有最少的总切割时间的项目列表,并根据最高的收藏夹计数到最低的顺序排列 var ProjectModel=mongoose.model('Project',schema) 您需要将两个sort术语放在一个对象中: export

我对mongodb很陌生。我设法得到了一个简单排序的基本概念,它只基于一个参数。如果有两个以上的排序参数,该怎么办。例如,在由具有属性
totalCuttingTime
favorited
的木工项目组成的数据库中

以下是一个正确的mongoose/mongodb函数,用于查找具有
最少的
总切割时间的项目列表,并根据
最高的
收藏夹计数到最低的顺序排列

var ProjectModel=mongoose.model('Project',schema)


您需要将两个
sort
术语放在一个对象中:

exports.getMinCuttingTime = function(number, callback){ 
    ProjectModel.find()
        .sort({totalCuttingTime: 1, favoriteCount: -1})
        .select({_id: 1})
        .limit(number)
        .exec(
            function(err, projects) {
                callback(null, projects)
            }
        );
};
值得注意的是,Node.js所基于的ECMA-262标准并没有指定维护对象的属性顺序,它只是匹配插入顺序的事实标准。为了消除任何疑问,您可以改用数组:

.sort([['totalCuttingTime', 1], ['favoriteCount', -1]])

这是正确的。Mongo中的“按两个字段排序”与SQL查询中的“按A、B排序”相同。@AsyaKamsky,语法正确吗?其中
ProjectModel
来自
mongoose.model('Project,schema)
sorry,不能告诉你-我在评论这种方法是否正确-选择totalCuttingTime的最小值,然后选择具有该totalCuttingTime的所有文档并按另一个值排序。考虑到JavaScript中的对象键在技术上是无序的,这能保证先按
totalCuttingTime
排序吗,接下来是
favoriteCount
?@JohnnyHK我一直在寻找关于sort Mongoose和MongoDb的文档,它们都定义了sort()。是否有使用数组定义定义排序的链接?@pravin本机驱动程序包含数组样式。这是nodejs特有的功能,应该包含在mongoose文档中。。不知道为什么不包括在内。。无论如何,谢谢你,显然按数组排序已经不可能了;需要对象或字符串。不清楚传递对象时是否保留顺序,但传递字符串时似乎保留顺序:
.sort([['totalCuttingTime', 1], ['favoriteCount', -1]])