Node.js Mongoose使用多个字段查找和排序

Node.js Mongoose使用多个字段查找和排序,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,对于MongoDB中的文档,我有以下模式: var postSchema = new mongoose.Schema({ domain: { type: String, enum: ['public', 'private'], required: true }, created_at: { type: Date }, last_modified: { type: Date }, data: { start_date: { year: { type: Numbe

对于MongoDB中的文档,我有以下模式:

var postSchema = new mongoose.Schema({
  domain: { type: String, enum: ['public', 'private'], required: true },
  created_at: { type: Date },
  last_modified: { type: Date },
  data: {
    start_date: {
      year: { type: Number, required: true },
      month: { type: Number },
      day: { type: Number },
      hour: { type: Number },
      minute: { type: Number }
    },
    end_date: {
      year: { type: Number },
      month: { type: Number },
      day: { type: Number },
      hour: { type: Number },
      minute: { type: Number }
    }
  }
});
我想做的是,当执行一个简单的查询来查找所有文档时,返回所有按对象升序排序的文档
start\u date
,也就是说,对象本身代表一个日期,我想按升序返回所有文档。有可能这样做吗?如果是,如何进行


如果不可能,我想我可以有一个类型为
Date
的附加字段,然后使用该字段进行排序,对吗?虽然我可能没有完整的对象(年、月、日、小时和分钟)。

请尝试使用多个排序字段

Post.find({}).sort({'data.start_date.year': 1,
                    'data.start_date.month': 1,
                    'data.start_date.day': 1,
                    'data.start_date.hour': 1,
                    'data.start_date.minute': 1
                  }).exec(function(err, results){})
这样,就更好地为它建设,


但是,最好将字段
start\u date
存储为一个
date()
type.

Awesome:-)索引,以便对文档进行排序。出于我的应用程序的要求和目的,最好将字段
start\u date
作为一个对象(按原样)。然而,这似乎奏效了!谢谢:DI建议添加对您发布的代码的解释,以提高答案的质量
Post.find({})
    .sort({'data.start_date.year': 1,
           'data.start_date.month': 1,
           'data.start_date.day': 1,
           'data.start_date.hour': 1,
           'data.start_date.minute': 1
          })
     .exec(function(err, result){

     });
Post.find({})
    .sort({'data.start_date.year': 1,
           'data.start_date.month': 1,
           'data.start_date.day': 1,
           'data.start_date.hour': 1,
           'data.start_date.minute': 1
          })
     .exec(function(err, result){

     });