我正在尝试做的事情对我来说听起来合乎逻辑,但我不确定。
我正在尝试通过使用 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
那是成功的。
结果:
但是在explain
上述查询中使用 RockMongo 的功能时,结果是:
{
"indexOnly": false,
"indexBounds": {
"tags": [
[
"etc",
"etc"
],
[
"shopping",
"shopping"
],
[
"store",
"store"
]
]
}
}
问题:
- 为什么索引不起作用,我还有其他事情要做吗?
- 在这种情况下,多键索引是否有益?(我假设是的。)
- 是否有另一种形式的索引会更有益?
编辑:
我刚刚注意到在 RockMongoexplain
数据中有一个字段:
"isMultiKey": true,
是否正在使用 Multikeys 并且我完全误解了它正在被索引?