我经常(不管是好是坏)发现自己使用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}}?
如果只有在创建集合时才能做到这一点,则我的数据集足够小,因此创建新数据集并复制数据就不会成为问题。
答案 0 :(得分:0)
除非您指定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/