db.find.sort()的行为是什么?

时间:2014-03-25 07:40:47

标签: mongodb mongoose mongodb-query

例如,这是我们的文档架构,在 created_at 字段中有降序索引

var titles = {
  title: String,
  created_at:{
    type: Date,
    index: -1
  }
}

以下是2个问题:

第一 如果我们致电db.titles.find()db.titles.findOne(),结果顺序如何? 我的意思是它将以desc或asc顺序返回对象?

第二 这边怎么样?

db.titles.find().sort({created_at: -1})

MongoDB如何在上面的代码中表现? 动态排序,或者只使用我们在架构中定义的索引顺序

1 个答案:

答案 0 :(得分:2)

  

1st:如果我们调用db.titles.find()或db.titles.findOne(),结果如何   订单会吗?我的意思是它将以desc或asc顺序返回对象?

它将返回natural order中的文档 - 按顺序将文档存储在磁盘上。如果要按created_at对文档进行排序,则应明确指定:

db.titles.find().sort({created_at: -1})
  

MongoDB如何在上面的代码中表现?即时对结果进行排序   或者它只使用我们在模式中定义的索引顺序?

由于您已在created_at字段上有索引,因此Mongo将使用它。但是如果你要添加一些查询

db.titles.find({title: /Foo/}).sort({created_at: -1})

然后Mongo将无法再使用您的索引对查询结果进行排序,并将被迫对其进行即时排序。

您可以找到更多aboun MongoDB索引in this blog post