是否可以设置要在mongodb中的集合上使用的默认索引?

时间:2019-01-25 21:04:24

标签: mongodb

我经常(不管是好是坏)发现自己使用MongoDB Compass即时编辑文档。我编辑的文档几乎总是属于最新创建的文档。这些文档的子集表示发生在某个日期的事件。

{
  "eventId": 1, // data about the event itself, such as date, is stored in another collection
  "title": "My title",
  "subtitle": "My subtitle",
  /* other fields... */
}

理想情况下,当我单击Compass中的 Find 按钮时,它将以eventId的降序排列,并以条目title和{{ 1}}。我为此创建了索引:

subtitle

是否可以告诉MongoDB服务器在订购文档时使用该索引,或者在插入过程中(然后重建已经存在的数据集),或者至少在返回不带db.myCollection.createIndex({ eventId: -1, title": 1, subtitle: 1 }); / {的结果时使用它被指定为{1}}?

如果只有在创建集合时才能做到这一点,则我的数据集足够小,因此创建新数据集并复制数据就不会成为问题。

1 个答案:

答案 0 :(得分:0)

根据documentation

  

除非您指定sort()方法或使用$ near运算符,   MongoDB不保证查询结果的顺序。

您可以像这样对其进行排序,它将使用索引:

db.myCollection.find().sort({eventId: -1, title: 1, subtitle: 1})

要查看索引是否真正被使用,请尝试以下操作:

db.myCollection.explain().find().sort({eventId: -1, title: 1, subtitle: 1})

在输出中,在"stage" : "IXSCAN"中查找winningPlan。如果存在,则使用索引执行查询。

更多信息:https://docs.mongodb.com/manual/core/query-optimization/ https://docs.mongodb.com/manual/reference/explain-results/