使用Mongo Middleware按不同的排序方向排序3列

时间:2015-08-24 03:46:35

标签: mongodb middleware

使用Mongo Middleware时,您可以按升序/降序配置多个列,如示例所示

You may also specify ascending and descending sorts together:

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

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

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

无法执行以下操作。

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

1 个答案:

答案 0 :(得分:1)

好吧,你真正需要做的就是从Mongoose调用普通的.sort()方法而不是插件的.order()方法:

{ options: { start: 0, count: 3 },
  results:
   [ { _id: 55da9c9593d2c4ed0d26cf79, a: 1, b: 2, c: 3, __v: 0 },
     { _id: 55da9c9593d2c4ed0d26cf7c, a: 2, b: 2, c: 1, __v: 0 },
     { _id: 55da9c9593d2c4ed0d26cf7a, a: 2, b: 1, c: 4, __v: 0 } ],
  total: 4 }

按正常方式返回受中间件影响的结果:

.order()

因此,影响光标的标准方法似乎最适合在这种情况下使用。

如果你真的想要,那么只需在配置中加入反映分页选项的内容。除非实际调用特定的var async = require('async'), mongoose = require('mongoose'), Schema = mongoose.Schema; require('mongoose-middleware').initialize(mongoose); mongoose.connect('mongodb://localhost/test'); var testSchema = new Schema({ a: Number, b: Number, c: Number }); var Test = mongoose.model( 'Test', testSchema ); async.series( [ function(callback) { Test.remove({},callback); }, function(callback) { 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 } ], function(item,callback) { Test.create(item,callback); }, callback ); }, function(callback) { Test.find().sort({ a: 1, b: -1, c: 1 }).page({ start: 0, count: 3, sort: { a: 1, b: -1, c: 1, } },function(err,docs) { console.log(docs); callback(err); }); } ], function(err) { if (err) throw err; mongoose.disconnect(); } ); 方法,否则显然无关紧要:

{ options: { start: 0, count: 3, sort: { a: 1, b: -1, c: 1 } },
  results:
   [ { _id: 55da9e12c74b0e0b0eeec3cf, a: 1, b: 2, c: 3, __v: 0 },
     { _id: 55da9e12c74b0e0b0eeec3d2, a: 2, b: 2, c: 1, __v: 0 },
     { _id: 55da9e12c74b0e0b0eeec3d0, a: 2, b: 1, c: 4, __v: 0 } ],
  total: 4 }

而“选项”实际上只是“被淘汰”:

{ a: 1, b: -1, c: 1 }

尽管mongoose提供了扩展语法,<div class="wrapper"> <div class="row"> <div class="col-sm-4"> <tabset> <tab> <tab-heading>Profile</tab-heading> <!--Content of tab goes here--> </tab> <tab> <tab-heading>Users</tab-heading> <div class="content"> <a ng-repeat="user in users"> <user-item profile="user"></user-item> </a> </div> </tab> </tabset> </div> <div class="col-sm-8"> <div class="chat-box"> <a ng-repeat="message in messages"> <message-item message="message"></message-item> </a> </div> </div> </div> </div> 是支持排序操作的标准MongoDB表单。所以它仍然有效。