我试图做的事对我来说听起来合乎逻辑,但我不确定。将MongoDB移动到Multikeys,但indexOnly返回false
我想通过使用Multikeys来改进部分MongoDB集合。
例如:我有一个具有以下格式的多个文件:
文件:
{
"_id": ObjectId("528a4177dbcfd00000000013"),
"name": "Shopping",
"tags": [
"retail",
"shop",
"shopping",
"store",
"grocery"
]
}
查询:
到现在为止,我一直在使用下面的查询以匹配tags
字段。
var tags = Array("store", "shopping", "etc");
db.collection.findOne({ 'tags': { $in: tags } }, { name: true });
这一直运作良好,但我觉得应该Multikeys在这种情况下被用来提高速度&性能。请纠正我,如果我错了!
索引:
我企图指数tags
发出以下命令。
db.collection.ensureIndex({ tags: 1 }, { safe: true }, function(err, doc) {});
ensureIndex
成功。
结果:
但是使用上述查询RockMongo的explain
功能时,其结果是:
{
"indexOnly": false,
"indexBounds": {
"tags": [
[
"etc",
"etc"
],
[
"shopping",
"shopping"
],
[
"store",
"store"
]
]
}
}
问题:
- 为什么索引不能正常工作,还有什么我不得不做的吗?
- 在这种情况下多键索引是有益的吗? (我假设是的,)
- 是否有另一种索引的形式会更有益?
编辑:
我刚刚注意到,在RockMongo explain
数据有一个字段: "isMultiKey": true,
那也许是因为正在使用Multikeys和我已经完全误解了它被索引?