使用"字段"查询索引:{$ not:{$ elemmatch:{...}}?

时间:2014-09-02 17:01:22

标签: mongodb pymongo mongodb-query mongodb-indexes

为什么这个查询在搜索这样的文档时没有使用这个索引?

我的查询:

{ 
  "unique_contact_method.enrichments": {
    "$not": {
      "$elemMatch": {
        "created_by.name":enrichment_name
}}}}

我的索引:

{ key: { "unique_contact_method.enrichments.created_by.name": 1 }, ... }

我的文件:

{
    "created_at": "...",
    "unique_contact_method": {
        "type"  : "...",
        "handle": "...",
        "enrichments":  [{
            "created_at"    : "...",
            "created_by"    : {
                "name"      : "...",
                "version"   : "..."
            },
            "attrs" : { /* ... */ }
            }, /* ... */
        ],
        "master_id_doc_id": "..."
    }
}

1 个答案:

答案 0 :(得分:4)

$not可能对索引很挑剔。将查询重写为:

{'unique_contact_method.enrichments.created_by.name': {$ne: enrichment_name}}

这绝对应该使用索引。