【发布时间】:2014-03-01 03:54:37
【问题描述】:
全部,
我有一个包含以下字段的 mangodb 集合。
- _ID
- 标题
- 说明
- 标签、数组
我在 _id 和 tags 字段上创建了 2 个索引。我创建了索引供人们使用关键字搜索内容。
我创建了带有标签的索引:-1 以显示最先显示的最新插入记录。但即使在那之后它也以_id的升序显示。
如何在标签字段上创建索引以显示最后插入的内容,同时它应该允许我更快地搜索标签字段。
【问题讨论】:
全部,
我有一个包含以下字段的 mangodb 集合。
我在 _id 和 tags 字段上创建了 2 个索引。我创建了索引供人们使用关键字搜索内容。
我创建了带有标签的索引:-1 以显示最先显示的最新插入记录。但即使在那之后它也以_id的升序显示。
如何在标签字段上创建索引以显示最后插入的内容,同时它应该允许我更快地搜索标签字段。
【问题讨论】:
如果_id字段是默认的ObjectId,反映了插入顺序,并且你想按插入顺序降序查询所有带有特定标签的文档,可以使用如下查询:
find({ Tags : $value }).sort({ _id : -1 })
对于此查询,您可以在 { Tags : 1, _id : -1 } 上创建复合索引。具有相同标签的所有文档将按插入顺序降序排序,此索引应该适用于此查询。
请注意,如果您对标签进行范围查询,例如:
find({ Tags : { $in : [ $value1, $value2 ] }}).sort({ _id : -1 })
find({ Tags : { $gt : $value}}).sort({ _id : -1})
它将无法使用索引对结果文档进行排序,并且需要在内存中对结果进行排序。您可以使用.explain(true) 运行查询以检查查询计划。如果scanAndOrder 为真,则表示查询不能使用索引中文档的顺序来返回排序结果。
还有一些与索引相关的文档和博客,我建议您阅读:
【讨论】: