为了账号安全,请及时绑定邮箱和手机立即绑定

findAndModify 不使用索引搜索

findAndModify 不使用索引搜索

大话西游666 2023-04-18 14:40:55
我在 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,因此忽略了索引。


查看完整回答
反对 回复 2023-04-18
  • 1 回答
  • 0 关注
  • 85 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信