我對MongoDB稀疏索引有疑問。 我有一個集合(後)用很少的文檔(6K最大的),可以以這種方式嵌入子文檔:MongoDB稀疏索引和數組:太多索引的文檔
{
"a": "a-val",
"b": "b-val",
"meta": {
"urls": [ "url1", "url2" ... ],
"field1": "value1",
...
}
}
字段「A」和「B」總是呈現,而是「 meta.urls「可能不存在!現在
,我剛好插入一個文件與「meta.urls」的值,然後我做了
db.post.ensureIndex({"a": 1, "b": 1, "meta.urls": 1}, {sparse: true});
後統計給了我一個「奇怪」的結果:指數約爲97MB! 這怎麼可能?只有一個插入「meta.urls」的文檔,索引大小爲97MB?
所以,我想通過這種方式來創建唯一的「meta.urls」指數:
db.post.ensureIndex({"meta.urls": 1}, {sparse: true});
我那裏有1文檔現在「meta.urls_1」指數。 但如果我解釋這樣
db.post.find({"meta.urls": {$exists: true}}).hint("meta.urls_1").explain({verbose: true});
我還有一個「奇怪」的結果,一個簡單的查詢:
"n" : 1,
"nscannedObjects" : 5,
"nscanned" : 5,
爲什麼蒙戈掃描文檔5,一個不只是一個索引?
如果我查詢「meta.urls」上的精確匹配,單個稀疏索引將正常工作。
例子: db.post.find({ 「meta.urls」: 「爲url1」})。提示( 「meta.old_slugs_1」)// 1文件