mongodb索引找到空值

时间:2016-03-12 13:30:37

标签: mongodb indexing

我们说我有一个emails集合,其字段和记录如下:

{
  sendAt: "",
  to: "3432849342332@someone.com",
  from: "3432849342332@anotherone.com"
}

如果我只需要查询 sendAt字段的记录。考虑到这个要求,我应该如何索引此收集字段?我实际上并不需要查询sendAt字段中的任何特定日期,因此在我看来,完整索引将是多余的。是否可以使用mondogb?

1 个答案:

答案 0 :(得分:2)

从MongoDb 3.2开始,您可以使用部分索引:https://docs.mongodb.org/manual/core/index-partial

例如,在您的情况下:

db.emails.createIndex(
   { sendAt: 1 },
   { partialFilterExpression: { sendAt: "" } }
)

另一种方法是在sendAt为空的文档中添加额外字段,并在该字段上创建稀疏索引:https://docs.mongodb.org/manual/core/index-sparse/

{
  sendAt: "",
  to: "3432849342332@someone.com",
  from: "3432849342332@anotherone.com",
  sendAtEmpty: true
}

{
  sendAt: "1/1/1980",
  to: "3432849342332@someone.com",
  from: "3432849342332@anotherone.com",
}

db.emails.createIndex( { "sendAtEmpty": 1 }, { sparse: true } )