我有一个名为users的集合,如下所示。
db.users.find().pretty()
{
"_id" : ObjectId("512efc206074b0e4bbdce792"),
"login_id" : "dutchuser",
"isBroker" : false
}
我想使用login_id和isBroker字段为此users集合应用索引。
db.users.ensureIndex( { "login_id": 1, "isBroker": 1 }, { unique: false } )
我担心的是,大多数 isBroker 字段的值为 false 。 那么我有可能以这种方式应用索引吗?
答案 0 :(得分:1)
您不能有条件地将过滤器应用于MongoDB中的索引。虽然您可能会重新构建数据或在模式中引入其他可能重复的字段,但我不相信这是一个合理的“优化”。
使用db.stats()
来实际衡量数据库的大小,并使用db.{collectionname}.totalIndexSize()
来了解您提出的索引的真正影响。
使用此索引:
db.users.ensureIndex( { "login_id": 1, "isBroker": 1 }, { unique: false } )
您只能使用涉及login_id
和isBroker
或login_id
的查询。根据您运行的查询类型,您可能还会遇到this当前未解决的问题,这可能导致isBroker
上的简单分组/排序效率低下(或者在某些时候变为broker_type
例如)。