【问题标题】:why is mongodb not indexing my collection为什么 mongodb 没有索引我的收藏
【发布时间】:2016-09-08 10:52:51
【问题描述】:

我创建了一个集合并仅添加了一个名称字段并尝试应用以下索引。

db.names.createIndex({"name":1})

即使在应用索引后,我也看到了以下结果。 db.names.find()

{ "_id" : ObjectId("57d14139eceab001a19f7e82"), "name" : "kkkk" } { “_id”:ObjectId(“57d1413feceab001a19f7e83”),“名称”:“aaaa”} { “_id”:ObjectId(“57d14144eceab001a19f7e84”),“名称”:“zzzz”} { “_id”:ObjectId(“57d14148eceab001a19f7e85”),“名称”:“dddd”} { "_id" : ObjectId("57d1414ceceab001a19f7e86"), "name" : "rrrrr" }

我在这里错过了什么。

【问题讨论】:

  • 您是否期待排序结果,只需添加索引?

标签: mongodb indexing


【解决方案1】:

可汗...

您建立索引的方式是正确的,但是在名称上建立升序索引不会按升序返回结果。

如果您需要按名称排序结果,则必须使用

{db.names.find().sort({names:1})}

当您建立索引时会发生什么,当您搜索数据时,Mongo 进程会在后台以有序的方式执行搜索以获得更快的结果。

请注意:如果您只想按排序顺序查看输出。你甚至不需要索引。

【讨论】:

    【解决方案2】:

    通过运行find() 命令,您将无法查看索引是否已成功创建(除非有相当高的速度性能)。

    改为使用db.names.getIndexes() 来查看索引是否已创建(如果您在后台运行索引,它可能需要一些时间才能显示在索引列表中)

    【讨论】:

    • 这是问题中的拼写错误,我已修复。我只使用字段“名称”创建了索引,但它仍然不起作用。我在 mongo 3.2
    • 尝试运行db.names.getIndexes()并查看索引是否已创建。
    • 是的,索引已创建。
    • ...那么问题是什么?
    • 不,您需要提供sort() 来对结果集进行排序。索引排序是为了让 MongoDB 知道如何组织索引。请参阅:docs.mongodb.com/manual/core/index-single/… 和 docs.mongodb.com/manual/indexes/#index-types
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多