我在 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 没有使用我的索引?
1 回答
繁星淼淼
TA贡献1775条经验 获得超11个赞
所以显然你错过了这样一个事实,即你的 python 代码默认添加了一个sort by $neutral
,所以排序实际上得到了 winningPlan,因此忽略了索引。
添加回答
举报
0/150
提交
取消