NULL

时间:2019-08-09 07:55:44

标签: mongodb

我有一个包含如下文档的集合:

{ 
    "_id" : "naTdAOPLSniDIHkZ78-E3ld0nAkLNHpW", 
    "UserId" : "1", 
    "KeyType" : "secret", 
    "CreatedDate" : ISODate("2019-08-08T19:30:47.902+0000"), 
    "ExpiryDate" : null, 
    "CancelledDate" : null, 
    "Notes" : null, 
}

我创建了一个密钥:(摘自db.getIndexes()

        "key" : {
            "UserId" : 1.0, 
            "CancelledDate" : 1.0, 
            "ExpiryDate" : 1.0
        }, 

我必须回答类似的查询

  • 已取消的用户所有键({{CancelledDate“:{$ ne:null}}
  • 用户的所有键
  • 所有活动键(意味着未取消且未过期)

我刚刚注意到,查询中包含日期之一(大多数文档都包含NULL值)后,始终会执行完全收集扫描,这非常糟糕 >!如果我仅查询特定的UserId,则使用索引。

那么这种情况下最好的索引策略是什么?我应该为$type创建带有特殊NULL表达式的partial index还是必须创建更好的查询?我在客户端上使用C#和JAVA。

0 个答案:

没有答案