使用多个字段进行Mongoose查找和排序

时间:2016-03-08 12:24:57

标签: 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: 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_date的升序排序的所有文档,即对象本身代表一个日期,我会喜欢按升序日期返回所有文件。可以这样做吗?如果是,怎么样?

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

2 个答案:

答案 0 :(得分:1)

请尝试使用多个排序字段

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){})

通过这种方式,最好为它构建index

postSchema.index({'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});

但是,最好将字段start_date存储为一个Date()类型。

答案 1 :(得分:0)

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){

     });