findAndModify 不使用索引搜索

我在 mogno 4.2 中使用 python (pymongo)


我的数据库包含大约 1M 文档,来自数据库的示例:


{

    "_id" : ObjectId("5f41983da09c453f96cebf02"),

    "my_id" : "1",

    "data": {

        "status": "new"

    }

}

我创建了两个索引,一个用于“my_id”,第二个用于“data.status”字段。


在我的代码中,我做了一个仅使用索引字段的简单 find_one_and_update:


document = collection.find_one_and_update(

            filter={

                "$and": [

                    {"data.status": "new"},

                    {"_id": ObjectId("5f41983da09c453f96cebf02")},

                ]

            },

            update={

                "$set": {

                    "data": {

                        "status": "in_progress",

                        "last_update": datetime.datetime.utcnow(),

                        "other_data": data

                     }

                }

            }

        )

在全规模生产环境下运行它会导致 COLLSCAN 而不是 IXSCAN。但是从 robo3t 手动运行它,操作是 IXSCAN。


我的问题是,为什么 mogno 没有使用我的索引?


大话西游666
浏览 86回答 1
1回答

繁星淼淼

所以显然你错过了这样一个事实,即你的 python 代码默认添加了一个sort by $neutral,所以排序实际上得到了 winningPlan,因此忽略了索引。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python