【问题标题】:Mongoose find and sort using multiple fieldsMongoose 使用多个字段查找和排序
【发布时间】:2016-03-10 11:21:29
【问题描述】:

我在 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 类型的附加字段,然后使用该字段进行排序,对吧?虽然我可能没有完整的对象(年、月、日、小时和分钟)。

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案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() 类型。

    【讨论】:

    • 真棒 :-) 用于排序文档的索引。
    • 为了我的应用程序的要求和目的,最好将字段 start_date 作为对象(原样)。但是,这似乎有效!谢谢:D
    【解决方案2】:
    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){
    
         });
    

    【讨论】:

    • 我建议您添加对您发布的代码的解释,以提高您的答案质量
    猜你喜欢
    • 2017-03-26
    • 2017-10-16
    • 2020-11-24
    • 2021-11-01
    • 2013-01-09
    • 2012-07-15
    • 2019-03-19
    • 2020-11-27
    • 2020-04-23
    相关资源
    最近更新 更多