Mongodb 使用Mongo中间件按不同的排序方向对3列进行排序

Mongodb 使用Mongo中间件按不同的排序方向对3列进行排序,mongodb,middleware,Mongodb,Middleware,当使用Mongo中间件时,您可以按照升序/降序配置多个列,如示例所示 我想解决的问题是如何让每一列都有自己配置的排序方向 中间件排序配置似乎只支持两个配置节点(asc和desc) 没有办法做下面这样的事情 var options = { sort : { name: 'asc', birthday: 'desc', home: asc } }; 看起来你真正需要做的就是从Mongoose调用普通方法,而不是插件的方法: var

当使用Mongo中间件时,您可以按照升序/降序配置多个列,如示例所示

我想解决的问题是如何让每一列都有自己配置的排序方向

中间件排序配置似乎只支持两个配置节点(asc和desc)

没有办法做下面这样的事情

var options = {
    sort : {
        name: 'asc',
        birthday: 'desc',
        home: asc
    }
};

看起来你真正需要做的就是从Mongoose调用普通方法,而不是插件的方法:

var async=require('async'),
mongoose=require('mongoose'),
Schema=mongoose.Schema;
需要('mongoose-middleware')。初始化(mongoose);
猫鼬mongodb://localhost/test');
var testSchema=新模式({
a:号码,
b:号码,
c:号码
});
var Test=mongoose.model('Test',testSchema);
异步系列(
[
函数(回调){
Test.remove({},回调);
},
函数(回调){
async.each(
[
{a:1,b:2,c:3},
{a:2,b:1,c:4},
{a:4,b:3,c:1},
{a:2,b:2,c:1}
],
函数(项,回调){
创建(项,回调);
},
回拨
);
},
函数(回调){
Test.find().sort(“a-bc”).page({
起点:0,
计数:3
},函数(错误,文档){
console.log(文档);
回调(err);
});
}
],
功能(err){
如果(错误)抛出错误;
mongoose.disconnect();
}
);
返回受中间件自身影响的结果,按正常方式:

{选项:{开始:0,计数:3},
结果:
[{u id:55da9c9593d2c4ed0d26cf79,a:1,b:2,c:3,{u v:0},
{{u id:55da9c9593d2c4ed0d26cf7c,a:2,b:2,c:1,{u v:0},
{{u id:55da9c9593d2c4ed0d26cf7a,a:2,b:1,c:4,{u v:0}],
总数:4}
因此,在这种情况下,影响光标的标准方法似乎是最合适的

如果您真的需要,那么只需在配置中加入一些反映分页选项的内容。除非实际调用了特定的
.order()
方法,否则这显然无关紧要:

var async=require('async'),
mongoose=require('mongoose'),
Schema=mongoose.Schema;
需要('mongoose-middleware')。初始化(mongoose);
猫鼬mongodb://localhost/test');
var testSchema=新模式({
a:号码,
b:号码,
c:号码
});
var Test=mongoose.model('Test',testSchema);
异步系列(
[
函数(回调){
Test.remove({},回调);
},
函数(回调){
async.each(
[
{a:1,b:2,c:3},
{a:2,b:1,c:4},
{a:4,b:3,c:1},
{a:2,b:2,c:1}
],
函数(项,回调){
创建(项,回调);
},
回拨
);
},
函数(回调){
Test.find().sort({a:1,b:-1,c:1})。第页({
起点:0,
计数:3,
排序:{
答:1,,
b:-1,
c:1,
}
},函数(错误,文档){
console.log(文档);
回调(err);
});
}
],
功能(err){
如果(错误)抛出错误;
mongoose.disconnect();
}
);
而“选项”实际上只是“被抛弃”:

{选项:{开始:0,计数:3,排序:{a:1,b:-1,c:1},
结果:
[{u id:55da9e12c74b0e0b0eeec3cf,a:1,b:2,c:3,{u v:0},
{{u id:55da9e12c74b0e0b0eeec3d2,a:2,b:2,c:1,{u v:0},
{{u id:55da9e12c74b0e0b0eeec3d0,a:2,b:1,c:4,{u v:0}],
总数:4}

其中,
{a:1,b:-1,c:1}
是支持排序操作的标准MongoDB表单,尽管mongoose提供了扩展语法。因此它仍然有效。

根据他们的文档,“当指定每个方向的多个排序时,所有降序排序都将应用于升序排序之前。”您尝试使用MongoDB做的事情非常可能,但显然不适用于此中间件。今天晚些时候我将对此进行测试,但这看起来很完美,感谢您提供的详细示例,您的示例是一个传奇
var options = {
    sort : {
        name: 'asc',
        birthday: 'desc',
        home: asc
    }
};